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

ffvjumwh  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(192)

数据库中的日期信息以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。
非常感谢您对此事的帮助!

scyqe7ek

scyqe7ek1#

听起来这些专栏应该 TIMESTAMP(3) ,不是 DATETIME(3) 或者是一些黑客 BIGINT . (看起来你有 BIGINT .)
那样的话,你可以 SET 时区一次,所有时间都会自动转换。

vngu2lb8

vngu2lb82#

在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

相关问题