Sql oracle to_date在自定义查询中返回一些错误
Oracle数据库Sql oracle to_date在自定义查询中返回一些错误,sql,oracle,Sql,Oracle,Oracle数据库 START_DATE |END_DATE --------------------|------------------- 2016-02-01 00:00:00 |2016-02-29 23:55:00 2016-02-01 00:00:00 |2016-02-29 23:55:00 2016-02-01 00:00:00 |2016-02-29 23:55:00 2016-02-01 00:00:00 |2016-02-29 23:
START_DATE |END_DATE
--------------------|-------------------
2016-02-01 00:00:00 |2016-02-29 23:55:00
2016-02-01 00:00:00 |2016-02-29 23:55:00
2016-02-01 00:00:00 |2016-02-29 23:55:00
2016-02-01 00:00:00 |2016-02-29 23:55:00
2016-02-01 00:00:00 |2016-02-29 23:55:00
查询
`select * from VM_REPORT_TEMP_US where to_date(START_DATE,'YYYY-MM-DD HH24:MI:SS') >= '2016-02-01 00:00:00' AND to_date(END_DATE,'YYYY-MM-DD HH24:MI:SS') <= '2016-`02-24 24:59:00'`
`select*from VM_REPORT_TEMP_US where to_date(开始日期,'YYYY-MM-DD HH24:MI:SS')>='2016-02-01 00:00:00'和to_date(结束日期,'YYYY-MM-DD HH24:MI:SS')开始日期
和结束日期
已经是日期,因此您不必将它们转换为日期。转换字符串,或者更好地使用datetime文本
select *
from VM_REPORT_TEMP_US
where START_DATE >= timestamp '2016-02-01 00:00:00'
and END_DATE <= timestamp '2016-02-24 00:59:00'
选择*
来自VM_报告_TEMP_US
其中开始日期>=时间戳“2016-02-01 00:00:00”
结束日期start\u DATE
和END\u DATE
已经是日期,所以您不必将它们转换为日期。转换字符串,或者更好地使用datetime文本
select *
from VM_REPORT_TEMP_US
where START_DATE >= timestamp '2016-02-01 00:00:00'
and END_DATE <= timestamp '2016-02-24 00:59:00'
选择*
来自VM_报告_TEMP_US
其中开始日期>=时间戳“2016-02-01 00:00:00”
结束日期DoNOT使用带有DATE
列的to\u DATE()
。它首先将date
值转换为varchar
值,然后将其转换回开始时的date
to_date()
需要一个varchar
值,因此Oracle首先使用当前NLS设置将date
值转换为varchar
值。然后,它尝试将varchar
转换回日期,使用您提供的格式掩码,该掩码很可能与您的默认NLS格式不匹配,因此您会得到一个错误
您还应该在条件中使用正确的日期值,而不是根据当前NLS设置(再次)隐式转换为日期的字符串:
select *
from VM_REPORT_TEMP_US
where START_DATE >= timestamp '2016-02-01 00:00:00'
AND END_DATE <= timestamp '2016-02-24 23:59:00'
不要使用带有日期列的to_date()
。它首先将date
值转换为varchar
值,然后将其转换回开始时的date
to_date()
需要一个varchar
值,因此Oracle首先使用当前NLS设置将date
值转换为varchar
值。然后,它尝试将varchar
转换回日期,使用您提供的格式掩码,该掩码很可能与您的默认NLS格式不匹配,因此您会得到一个错误
您还应该在条件中使用正确的日期值,而不是根据当前NLS设置(再次)隐式转换为日期的字符串:
select *
from VM_REPORT_TEMP_US
where START_DATE >= timestamp '2016-02-01 00:00:00'
AND END_DATE <= timestamp '2016-02-24 23:59:00'
与上述两个答案略有不同,但这是我用来避免混淆YYYY-MM-DD
和yyy-DD-MM
的地方
select * from VM_REPORT_TEMP_US
where
START_DATE >= to_date('2016-02-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND
END_DATE <= to_date('2016-02-24 00:59:00','YYYY-MM-DD HH24:MI:SS')
从虚拟机报告中选择*
哪里
开始日期>=截止日期('2016-02-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
及
结束日期与上述两个答案有点不同,但这是我用来避免混淆YYYY-MM-DD
和yyy-DD-MM
的地方
select * from VM_REPORT_TEMP_US
where
START_DATE >= to_date('2016-02-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND
END_DATE <= to_date('2016-02-24 00:59:00','YYYY-MM-DD HH24:MI:SS')
从虚拟机报告中选择*
哪里
开始日期>=截止日期('2016-02-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
及
END_DATE它重新运行了一些类似以下的错误SQL错误[933][42000]:ORA-00933:SQL命令未正确结束java.SQL.SQLSyntaxErrorException:ORA-00933:SQL命令未正确结束
很好地解释了OP查询中发生的情况。我正要把它添加到我的答案中,这时你发布了你的:-),我也没有发现24小时。它重新运行了一些类似以下的错误SQL错误[933][42000]:ORA-00933:SQL命令没有正确结束java.SQL.SQLSyntaxErrorException:ORA-00933:SQL命令没有正确结束
很好地解释了OP的查询中发生了什么。我正要在我的回答中添加这一点,这时你发布了你的:-),我也没有发现24小时。