自动转换查询结果中每个日期列的日期格式的函数?

时间:2018-04-23 17:28:58

标签: mysql sql mariadb

我的数据库中的日期信息在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。

非常感谢有关此事的任何帮助!

2 个答案:

答案 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一次这个时区,并且所有时间都会自动转换。