Sql 如何将最后一秒添加到日期中?

Sql 如何将最后一秒添加到日期中?,sql,oracle,Sql,Oracle,有没有可能把一天中的最后一秒添加到日期中 假设我有不同时间的日期,我需要将每个日期设置为时间23:59:59 可能吗 谢谢是的。数据列可以存储日期值,包括带有第二个值的时间戳。像这样使用它- insert into tab_name (dt) values (to_date('20/09/2013 17:50:50', 'DD/MM/YYYY HH24:MI:SS')); 如果测试速度较慢,则可以通过以下方式进行: +1天-1秒是我获得该结果的逻辑,无需字符串连接: SELECT trunc(

有没有可能把一天中的最后一秒添加到日期中

假设我有不同时间的日期,我需要将每个日期设置为时间23:59:59

可能吗


谢谢

是的。数据列可以存储日期值,包括带有第二个值的时间戳。像这样使用它-

insert into tab_name
(dt)
values
(to_date('20/09/2013 17:50:50', 'DD/MM/YYYY HH24:MI:SS'));
如果测试速度较慢,则可以通过以下方式进行:


+1天-1秒是我获得该结果的逻辑,无需字符串连接:

SELECT trunc(SYSDATE) + 1 - (INTERVAL '1' SECOND) FROM DUAL

翻译成更新

UPDATE MY_TABLE 
SET MY_DATE_COLUMN = trunc(MY_DATE_COLUMN) + 1 - (INTERVAL '1' SECOND) 
但是请记住,在编写软件时,可维护性是至关重要的,阅读这篇文章要比提出的其他解决方案困难得多

推荐阅读

如果它是Oracle日期数据类型,您可以利用以下等效性:

一秒钟=0.00001

一天减去一秒=0.99999

e、 g


至于可读性,一旦每个人都只记住了这两个数字,读像
dt+0.99999
这样的东西就成了第二天性,即“1天减去1秒”。YMMV.

+1天-1秒是我要遵循的逻辑,以得出以下结论:通常最好将类似连续时间的时间建模为半开放时间间隔,包括开始日期和结束日期。这有助于减少在比较时间时可能出现的错误类型(例如,意外地排除了本应包含在特定范围内但不是因为发生在23:59:59.363的项目)。好吧,这是可行的,但我们是否希望看到结构化数据的字符串操作?我想这会更慢一些,但你似乎比我更有Oracle和SQL方面的经验。这会比我提议的直接日期操纵更快吗?我有点困惑,因为我不得不承认这是更好的可读性,这是有利的,从这个角度来看,我的方法是过早优化…@ppeterka66没有“字符串操作”在进行。我正在基于现有值创建一个新的日期值(由于使用的格式掩码,这是“NLS”安全的)。但我也喜欢你的想法。这将是有趣的,但你的版本是否更快-虽然我怀疑它。与将更改写入磁盘所需的I/O相比,执行此操作所需的CPU要少得多。再想一想,性能问题不是很重要,除非它被证明是一个瓶颈。但在维护应用程序时,可读性实际上是至关重要的。人们不得不停下来思考我自己的解决方案的作用。
UPDATE MY_TABLE 
SET MY_DATE_COLUMN = trunc(MY_DATE_COLUMN) + 1 - (INTERVAL '1' SECOND) 
UPDATE mytable
SET mydatecolumn = TRUNC(mydatecolumn)+0.99999
WHERE ...;