如何将 SQL 中的 PM 日期时间与基于毫秒的时间进行比较?
How to compare PM datetime in SQL to millisecond-based time?
我有一个这种格式的数据库字段:
'2019/08/14 11:07:30 AM'
我想以这种格式与来自 Python 的数据框单元格进行比较:
'2020-04-06T13:40:23.000000000'
我试过将这些字段简单地与 >= 进行比较,但得到的 ORA-01681 文字与格式字符串不匹配。
AND s.time1 >= '2020-12-06T05:07:27.000'
AND s.time2 >= '2020-12-06T05:07:27.000'
ORA-01681 literal does not match format string
当我尝试将它们转换为日期时间时会发生同样的情况,但我得到的数据类型无效。我做错了什么以及比较两者的正确 SQL 表达式是什么?
AND CAST(s.time1 AS DATETIME) >= CAST('2020-12-06T05:07:27.000' AS DATETIME)
AND CAST(s.time2 AS DATETIME) >= CAST('2020-12-06T05:07:27.000' AS DATETIME)
显然,如果毫秒四舍五入是可以的,因为它们始终为 0,并且在这种情况下数据库时间没有那么精确。
假设您将日期存储为 Oracle timestamp
s ,那么您只需要转换为比较提供的文字值。为此,您可以使用 to_timestamp()
:
and s.time1 >= to_timestamp('2020-12-06T05:07:27.000', 'yyyy-mm-dd"T"hh24:mi:ss.ff3')
如果您使用的是 date
,那么我建议您修剪字符串,然后转换为 date
:
and s.time1 >= to_char(substr('2020-12-06T05:07:27.000', 1, 19), 'yyyy-mm-dd"T"hh24:mi:ss')
如果你想修改查询字符串,那么你可以将逻辑表达为:
s.time1 > timestamp '2020-12-06T05:07:27.000'
但是,我不推荐这种方法,因为您应该将值作为参数传递。
相反,将值作为 date
或 timestamp
参数传递以进行比较:
s.time1 > :time1
或者,如果您必须将其作为字符串传递,请将其解析为时间戳:
s.time1 > to_timestamp(:time1_str, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')
我有一个这种格式的数据库字段:
'2019/08/14 11:07:30 AM'
我想以这种格式与来自 Python 的数据框单元格进行比较:
'2020-04-06T13:40:23.000000000'
我试过将这些字段简单地与 >= 进行比较,但得到的 ORA-01681 文字与格式字符串不匹配。
AND s.time1 >= '2020-12-06T05:07:27.000'
AND s.time2 >= '2020-12-06T05:07:27.000'
ORA-01681 literal does not match format string
当我尝试将它们转换为日期时间时会发生同样的情况,但我得到的数据类型无效。我做错了什么以及比较两者的正确 SQL 表达式是什么?
AND CAST(s.time1 AS DATETIME) >= CAST('2020-12-06T05:07:27.000' AS DATETIME)
AND CAST(s.time2 AS DATETIME) >= CAST('2020-12-06T05:07:27.000' AS DATETIME)
显然,如果毫秒四舍五入是可以的,因为它们始终为 0,并且在这种情况下数据库时间没有那么精确。
假设您将日期存储为 Oracle timestamp
s ,那么您只需要转换为比较提供的文字值。为此,您可以使用 to_timestamp()
:
and s.time1 >= to_timestamp('2020-12-06T05:07:27.000', 'yyyy-mm-dd"T"hh24:mi:ss.ff3')
如果您使用的是 date
,那么我建议您修剪字符串,然后转换为 date
:
and s.time1 >= to_char(substr('2020-12-06T05:07:27.000', 1, 19), 'yyyy-mm-dd"T"hh24:mi:ss')
如果你想修改查询字符串,那么你可以将逻辑表达为:
s.time1 > timestamp '2020-12-06T05:07:27.000'
但是,我不推荐这种方法,因为您应该将值作为参数传递。
相反,将值作为 date
或 timestamp
参数传递以进行比较:
s.time1 > :time1
或者,如果您必须将其作为字符串传递,请将其解析为时间戳:
s.time1 > to_timestamp(:time1_str, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')