Sql 日期格式错误

Sql 日期格式错误,sql,oracle,Sql,Oracle,事务时间列为CHAR(78),返回2017-06-12-12.35.37.444978作为示例。我已经为此挣扎了一段时间,并且犯了很多错误。使用当前设置,我收到 执行查询时出错:ORA-01821:无法识别日期格式 变量1=20170612 Variable2=20170615这是一个时间戳而不是日期,因此您需要使用to_timestamp()而不是to_date()这是一个时间戳而不是日期,因此您需要使用to_timestamp()而不是to_date()如果您只查看日期,那么可能更简单的版本

事务时间列为CHAR(78),返回2017-06-12-12.35.37.444978作为示例。我已经为此挣扎了一段时间,并且犯了很多错误。使用当前设置,我收到

执行查询时出错:ORA-01821:无法识别日期格式

变量1=20170612

Variable2=20170615

这是一个时间戳而不是日期,因此您需要使用
to_timestamp()
而不是
to_date()
这是一个时间戳而不是日期,因此您需要使用
to_timestamp()
而不是
to_date()
如果您只查看日期,那么可能更简单的版本会起作用:

Select 
  (*)
From 
  MISC
WHERE
  TO_DATE(TRANSACTION_TIME, YYYY-MM-DD HH24:MI:SS.FF6) Between 
  TO_DATE(:Variable1, 'YYYYMMDD') and TO_DATE(:Variable2, 'YYYYMMDD')

另外,为什么不将变量作为日期而不是字符串传递?这将绕过第二次转换。如果它们实际上是日期,那么这可能就是转换问题所在。

如果您只查看日期,那么可能可以使用更简单的版本:

Select 
  (*)
From 
  MISC
WHERE
  TO_DATE(TRANSACTION_TIME, YYYY-MM-DD HH24:MI:SS.FF6) Between 
  TO_DATE(:Variable1, 'YYYYMMDD') and TO_DATE(:Variable2, 'YYYYMMDD')

另外,为什么不将变量作为日期而不是字符串传递?这将绕过第二次转换。如果它们实际上是日期,那么这可能就是转换问题所在。

但是您指定的格式与实际格式不同吗?你期望它如何工作?你的第一次约会a)似乎与格式不匹配,b)不在引号中。我建议,在开始使
介于
之间的部分工作之前,请将注意力集中在
事务时间
数据类型不支持小数秒的
截止日期
部分。按照APC的建议使用
时间戳
。具体来说,
.FF6
元素导致了故障。这对于时间戳数据类型是允许的,但对于日期数据类型是不允许的。将所有三次出现的TO_DATE更改为TO_TIMESTAMP。但是指定的格式与实际格式不同吗?你期望它如何工作?你的第一次约会a)似乎与格式不匹配,b)不在引号中。我建议,在开始使
介于
之间的部分工作之前,请将注意力集中在
事务时间
数据类型不支持小数秒的
截止日期
部分。按照APC的建议使用
时间戳
。具体来说,
.FF6
元素导致了故障。这对于时间戳数据类型是允许的,但对于日期数据类型是不允许的。将所有三次出现的TO_DATE更改为TO_TIMESTAMP。第一行中的
YYYY-MM-DD
应在单引号内?第一行中的
YYYY-MM-DD
应在单引号内?