sql - Oracle SQL 查询 TO_DATE
问题描述
我对 Oracle SQL 中的以下查询有疑问:
SELECT TO_DATE('10-11-2015','DD-MM-YYYY') FROM DUAL;
当我运行它时,结果如下10-NOV-15
。根据我在 Oracle 文档中阅读的内容,YYYY 应该转换为 4 位数年份,但它会转换为 2 位数年份。为什么会这样?
解决方案
日期设置为 4 位数年份。
但是,您将使用 Oracle 当前用于在您的用户会话中显示日期的默认格式显示日期。Oracle 用于隐式日期转换的默认格式取决于地区。对于美国(除其他外)来说,这是DD-MON-RR
并且将有一个两位数的年份;但对于瑞典,默认为RRRR-MM-DD
4 位数的年份。
可以使用以下方式设置此格式:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';
因此,如果您将默认格式设置为YYYY-MM-DD
(ISO-8601 日期格式),则使用:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
然后你的查询:
SELECT TO_DATE('10-11-2015','DD-MM-YYYY') FROM DUAL;
会输出2015-11-10
。
如果你想要一个特定的日期格式,那么你不应该依赖隐式转换,因为任何用户都可以在任何时候设置自己的格式,你不会得到一致的输出;相反,您应该使用显式转换:
SELECT TO_CHAR( TO_DATE('10-11-2015','DD-MM-YYYY'), 'DD-MM-YYYY' ) FROM DUAL;
会输出10-11-2015
。
推荐阅读
- monaco-editor - 在 Monaco 中显示内联窗格
- python - 在 Django View 中构建 JSON 以循环遍历
- javascript - 如何专注于页面加载后加载的元素
- java - Sybase 和 Oracle DB 之间的数据比较
- php - 第二个查询在硬编码时有效,但在我用 POST 变量替换 WHERE 条件时无效
- java - Java - 无法摆脱 while 循环
- typescript - 在库中包含自定义打字稿声明文件
- javascript - 如何在 javascript 中自动执行指令
- sql - 访问查询:不包括指定的表达式
- python - 将 Python 脚本应用于 Blender 中的大量 .obj 文件