有人可以向我解释当查询1返回查询2中使用的替换值时,为什么查询4的输出与其他输出不同,这应该等同于运行与查询4相同的操作?
我怀疑它与nls_date_format有关,但我不确定.
查询1
SELECT TO_DATE(SYSDATE, 'DD/MON/YYYY')FROM DUAL;
TO_DATE(SYSDATE,'DD/MON/YYYY')
------------------------------
02-SEP-15
Run Code Online (Sandbox Code Playgroud)
查询2
SELECT TO_DATE('02-SEP-15') - TO_DATE('01/JAN/07') FROM DUAL;
TO_DATE('02-SEP-15')-TO_DATE('01/JAN/07')
-----------------------------------------
3166
SELECT TO_DATE(SYSDATE, 'DD/MON/YY') - TO_DATE('01/JAN/2007') FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
查询3
TO_DATE(SYSDATE,'DD/MON/YY')-TO_DATE('01/JAN/2007')
---------------------------------------------------
3166
Run Code Online (Sandbox Code Playgroud)
查询4
SELECT TO_DATE(SYSDATE, 'DD/MON/YYYY') - TO_DATE('01/JAN/2007') FROM DUAL;
TO_DATE(SYSDATE,'DD/MON/YYYY')-TO_DATE('01/JAN/2007')
-----------------------------------------------------
-72732
Run Code Online (Sandbox Code Playgroud)
永远不要打电话to_date给date.
假设您nls_date_format的设置为"DD-MON-RR",这似乎是基于您的第一个查询,当您运行TO_DATE(SYSDATE, 'DD/MON/YYYY')以下操作时.
to_date不接受a date作为参数,它只需要一个varchar2.所以Oracle必须进行隐式转换date才能varchar2使用你的会话nls_date_format.to_date( '02-SEP-15', 'DD/MON/YYYY' )这个故事的寓意 - 从不打电话to_date给date.它已经是一个date.将它转换为a date是没有意义的.如果您只想将a的时间部分设置date为午夜,请使用trunc.不要投了date一个varchar2回date.
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |