Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle to_date在自定义查询中返回一些错误_Sql_Oracle - Fatal编程技术网

Sql oracle to_date在自定义查询中返回一些错误

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:

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: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小时。