首页 > 解决方案 > 当时间戳与另一个时间戳完全相同时如何删除行

问题描述

我有 1 个具有时间戳列的表,我正在尝试删除时间戳列是主键的行,那么如何删除该行?

例如:

Delete from access where timeStamp_column = '13/04/18 07:15:31,123457000'; 

像这样的东西,我一直在搜索,但我发现的只是“如何删除早于等的时间戳”,我需要它与我写的相同

谢谢,人们!

对不起我的英语:)

标签: databaseoracle

解决方案


您依赖基于会话 NLS 设置的隐式转换,这绝不是一个好主意。您应该使用to_timestamp()合适的格式掩码对字符串值进行显式转换。

看起来特别可疑的两件事是两位数的年份 - 如果您NLS_TIMESTAMP_FORMAT的 YYYY 将寻找 0018 而不是 2018;并且可能是 07 的小时值 - 您没有 AM/PM 标记,因此如果您NLS_TIMESTAMP_FORMATHH:MI:SS,FF9 AM'(或HH:... PM,或HH:...没有 AM 或 PM),那么您可能正在查看一天中的错误时间。

如果您有固定值,则可以使用时间戳文字:

delete from access
where timeStamp_column = timestamp '2018-04-13 07:15:31.123457000'; 

否则显式转换:

delete from access
where timeStamp_column = to_timestamp('13/04/18 07:15:31,123457000',
  'DD/MM/RR HH24:MI:SS,FF9');

(当然,假设它真的应该是早上 7 点;如果它应该是晚上 7 点,只需将 07 更改为 19)。


推荐阅读