Oracle时间戳无秒数

5

我在我的数据库表中有一个时间戳(6)列。我想对其进行比较,但不考虑秒部分。我知道可以使用trunc(timestamp)来删除时间并保留日期部分。是否有一种方法可以将秒设置为0?

我想要这样做:

CASE WHEN ARR NOT BETWEEN FROM AND TO THEN 1
     ELSE 0 END "mismatch"

但是当ARR的秒数大于FROMTO的秒数时,会出现不匹配的情况。我不关心秒数,只想考虑分钟。

非常感谢任何建议。

谢谢


trunc(timestamp * 24 * 60)怎么样? - Guntram Blohm
感谢您的回复。如果我这样做,会出现ORA-00932错误:不一致的数据类型:期望为数字而实际为时间戳。 - RNJ
2
不要截断,我认为你可以改变你的逻辑来使用秒... 这应该会更好。 - Maheswaran Ravisankar
1个回答

16

trunc()函数允许您通过可选的fmt参数来决定要丢弃多少精度;默认情况下会移除所有时间部分,即等效于trunc(x, 'DD')。如果您只想丢失秒数,可以使用MI

select systimestamp, trunc(systimestamp, 'MI') from dual;

SYSTIMESTAMP                        TRUNC(SYSTIMESTAMP,'MI')
----------------------------------- ------------------------
06-JAN-14 13.11.33.046920000 +00:00 2014-01-06 13:11:00      

请注意,trunc 返回的值现在是 DATE 而不是 TIMESTAMP。如果这是一个问题——可能并不是——你可以将其强制转换回来:

select systimestamp, cast (trunc(systimestamp, 'MI') as timestamp) from dual;

SYSTIMESTAMP                        CAST(TRUNC(SYSTIMESTAMP,'MI')ASTIMESTAMP)
----------------------------------- -----------------------------------------
06-JAN-14 13.14.43.270506000 +00:00 2014-01-06 13:14:00.000   

谢谢@AlexPoole 当我运行select systimestamp,trunc(systimestamp,'MI')from dual; 我得到的结果与运行select systimestamp,trunc(systimestamp,'DD')from dual; 相同。我似乎失去了所有时间。 - RNJ
@RNJ - 你是指时间显示为 00:00:00,还是你的 NLS_DATE_FORMAT 隐藏了日期部分?你可以使用 to_char() 来显示时间,但为了比较,请将其保留为日期。 - Alex Poole
太棒了,谢谢Alex!我从来不知道trunc()有这个可选参数。 - alexherm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接