我是新的SQL Developer用户,并且在更改日期方面做了很多工作。我有一个查询,它显示实际时间过去1小时的信息。这是因为从中获取数据的其中一个表的日期始终为 CST ,而其他表格则考虑具有 CDT 或 CST <的系统日期/ strong>取决于一年中的时间
当我加入桌子时,他们比实际时间晚1小时开始。为了弥补这一点,我必须使用DELIVERY_TIME+1/24
而不是DELIVERY_TIME
,但代码需要每年更改两次。
有没有解决方案?
答案 0 :(得分:1)
您希望尽可能将所有数据库值存储为UTC,因为它们会像您将要获得的那样具有通用性。您可以在应用程序层中将这些设置作为本地时间呈现,因为这些设置通常非常特定于查看数据的个人。
如果您每天都有特定的投放时间,例如下午6点,并且您想知道UTC的时间落在哪里,您可以构建时间并将其转换为UTC。大多数时区观察某种形式的DST在当地时间来回传播1小时,但不是在UTC中。
通常,数据库中可以使用MAKEDATE()
或MAKETIME()
等函数来构建任意时间点。使用它们在您首选的时区中制作一个时间,然后切换到UTC以使它们“固定”。
如果您的代码“必须每年更换两次”,您将拥有不会更改的代码,然后会出现混乱。不要这样做。你只是为自己做好准备。
作为一个注释,在SQL中执行此操作可能非常混乱,因为数据库并不总是具有最新的时区信息,除非它们严重依赖于操作系统。您的操作系统通常配备更好,如果发生类似it did in 2005的更改,则应该修补它。即使这样也是一团糟,因为修补和未修补系统的混合不断发生冲突。