我的数据库中的日期信息在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);
当我专门调用日期列时,这可以正常工作,但我不能将它应用于select *语句中的所有日期列。这可以使运行常规查询相当繁琐,特别是对于连接(因为我使用的大多数表都有3-6个日期列)!
我试图弄清楚如何创建能够识别结果集中每个日期列的内容,然后将日期格式应用于适用列中的所有行。我考虑过使用触发器,用户定义的函数和例程。但是我很难弄清楚如何才能完成这一壮举,或者甚至可以完成。
示例表将是"任务"使用这些日期列:rowAddedDate(bigint not null),rowUpdatedDate(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。
非常感谢有关此事的任何帮助!
答案 0 :(得分:0)
在sql server中使用动态sql演示进行循环:
create table #temp (rowid int identity, test varchar(max))
insert #temp
values
('a'),('b'),('c'),('d')
declare @iterator int = 1
declare @maxrows int = (select max(rowid) from #temp)
while @iterator<=@maxrows
begin
exec('select test from #temp where rowid='+@iterator+'')
set @iterator=@Iterator+1
end
答案 1 :(得分:0)
听起来这些列应该是TIMESTAMP(3)
,而不是DATETIME(3)
或者BIGINT
。 (看起来你有BIGINT
。)
这样,您可以SET
一次这个时区,并且所有时间都会自动转换。