ORACLE中的TO_DATE函数
我正在尝试使用ORACLE中的TO_DATE函数,oracle,date,Oracle,Date,我正在尝试使用TO\u DATE功能。具体来说,我注意到以下问题 1. SELECT TO_CHAR(TO_DATE('01-01-2015','DD-MM-YYYY'),'DD-MON-YY') FROM DUAL 2. SELECT TO_DATE('01-01-2015','DD-MM-YYYY') FROM DUAL 具有相同的输出:01-JAN-2015 为什么TO_DATE函数以缩写形式返回月份? 第二个查询的预期输出类似于01-01-2015(简单地说,是类型转换,而不是格式转换
TO\u DATE
功能。具体来说,我注意到以下问题
1. SELECT TO_CHAR(TO_DATE('01-01-2015','DD-MM-YYYY'),'DD-MON-YY') FROM DUAL
2. SELECT TO_DATE('01-01-2015','DD-MM-YYYY') FROM DUAL
具有相同的输出:01-JAN-2015
为什么TO_DATE
函数以缩写形式返回月份?
第二个查询的预期输出类似于01-01-2015
(简单地说,是类型转换,而不是格式转换)
我错了吗
谢谢日期没有格式-它们由表示 可能输出:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
这种格式对计算机比较日期非常有用,但对人们却没那么有用;因此,当SQL客户机(SQL/plus、SQL开发人员、TOAD等)显示日期时,它不显示字节,而是显示为字符串
它通过对_CHAR()(或其他字符串化日期的内部方法)进行隐式调用,并使用默认格式掩码来执行此转换
SQL/Plus和SQL Developer将使用用户的会话参数NLS\u DATE\u FORMAT
来执行此转换-请参阅相关内容
因此,您的第二个查询将被隐式转换为执行类似的操作(但几乎可以肯定,效率更高):
日期没有格式-它们由表示
可能输出:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
这种格式对计算机比较日期非常有用,但对人们却没那么有用;因此,当SQL客户机(SQL/plus、SQL开发人员、TOAD等)显示日期时,它不显示字节,而是显示为字符串
它通过对_CHAR()
(或其他字符串化日期的内部方法)进行隐式调用,并使用默认格式掩码来执行此转换
SQL/Plus和SQL Developer将使用用户的会话参数NLS\u DATE\u FORMAT
来执行此转换-请参阅相关内容
因此,您的第二个查询将被隐式转换为执行类似的操作(但几乎可以肯定,效率更高):
DATE
值的默认输出格式,respTO_DATE()
函数由NLS_DATE_格式
值设置。您可以通过以下查询进行验证:
SELECT *
FROM V$NLS_PARAMETERS
WHERE PARAMETER = NLS_DATE_FORMAT';
您可以在会话级别对其进行更改,例如使用
alter session set NLS_DATE_FORMAT = 'DD-MM-YYYY';
DATE
值的默认输出格式,respTO_DATE()
函数由NLS_DATE_格式
值设置。您可以通过以下查询进行验证:
SELECT *
FROM V$NLS_PARAMETERS
WHERE PARAMETER = NLS_DATE_FORMAT';
您可以在会话级别对其进行更改,例如使用
alter session set NLS_DATE_FORMAT = 'DD-MM-YYYY';
TO_CHAR的输出格式不正确,请尝试:
SELECT TO_CHAR(TO_DATE('01-01-2015','DD-MM-YYYY'),'DD-MM-YYYY') FROM DUAL;
TO_CHAR的输出格式不正确,请尝试:
SELECT TO_CHAR(TO_DATE('01-01-2015','DD-MM-YYYY'),'DD-MM-YYYY') FROM DUAL;
:用于将字符串转换为日期格式
与您的关注有关;您需要更改会话,如下所示:
alter session set nls_date_format='DD-MM-YYYY'
在连接后立即在应用程序中
因此,如果现在再次运行查询:
SELECT TO_DATE ('01-01-2015', 'DD-MM-YYYY')
FROM DUAL;
结果将如预期的那样:
01-01-2015
希望对您有所帮助。:用于将字符串转换为日期格式
与您的关注有关;您需要更改会话,如下所示:
alter session set nls_date_format='DD-MM-YYYY'
在连接后立即在应用程序中
因此,如果现在再次运行查询:
SELECT TO_DATE ('01-01-2015', 'DD-MM-YYYY')
FROM DUAL;
结果将如预期的那样:
01-01-2015
希望这会有所帮助。请阅读有关NLS设置的信息。显示的是会话的属性,而不是日期的物理表示。@Kacper因此,将带有数字月的日期转换为带有字符串月的日期的正确方法是第一种方法?日期是日期,它既没有数字月,也没有字符串月。这只是NLS设置如何打印日期。请阅读NLS设置。显示的是会话的属性,而不是日期的物理表示。@Kacper因此,将带有数字月的日期转换为带有字符串月的日期的正确方法是第一种方法?日期是日期,它既没有数字月,也没有字符串月。只有NLS设置日期的打印方式。