数据库中的日期信息以unixtime格式格式化为毫秒。目前,为了将结果集转换为mst,我使用以下函数字符串:
date_format(convert_tz(from_unixtime(table.column/1000),'utc','us/mountain')'%m/%d/%Y')
我有一个例程,可以应用于查询中的各个列,如下所示:
create function datefmt(convert_tz(TEDATE bigint, TEFMT text),'gmt','us/mountain')
returns varchar(50);
当我专门调用date列时,这个方法可以很好地工作,但是我不能将它应用于select*语句中的所有日期列。这会使运行常规查询变得非常乏味,尤其是对于联接(因为我使用的大多数表都有3-6个日期列)!
我正在尝试找出如何创建能够识别结果集中每个日期列的内容,然后将日期格式应用于适用列中的所有行。我考虑过使用触发器、用户定义函数和例程。但我很难弄清楚我到底怎样才能完成这一壮举,或者它是否可以完成。
示例表是具有以下日期列的“task”:rowaddeddate(bigint not null)、rowupdatedate(bigint not null)、createddate(bigint not null)、ordereddate(bigint not null)、serviceenddate(int null)、servicestartdate(int null)、expectedservicedate(int null)。
我使用一个克隆,数据库软件是mariadb v 10.2.12。
非常感谢您对此事的帮助!
2条答案
按热度按时间scyqe7ek1#
听起来这些专栏应该
TIMESTAMP(3)
,不是DATETIME(3)
或者是一些黑客BIGINT
. (看起来你有BIGINT
.)那样的话,你可以
SET
时区一次,所有时间都会自动转换。vngu2lb82#
在sql server中使用动态sql演示进行循环: