如何在 sql 中使用 to_date 的 substr 函数?
how to use substr function with to_date in sql?
查询是:
select substr(to_date('01-02-2018','mm-dd-yyyy'),4,3) from dual;
输出是:
JAN
谁能解释一下输出是怎么来的?
当您将文本函数直接应用于 DATE 数据类型时,您会强制将日期隐式转换为字符串。此转换使用 NLS_DATE_FORMAT 参数来决定输出字符串的格式。
实际上,
substr(to_date('01-02-2018','mm-dd-yyyy'),4,3)
与
相同
substr(to_char(to_date('01-02-2018','mm-dd-yyyy'), <NLS_DATE_FORMAT>),4,3)
NLS_DATE_FORMAT 参数的通常默认值(对于英文版本的数据库)是 DD-MON-RR
- 这听起来像是设置了 NLS_DATE_FORMAT 参数的值到,这意味着您的查询正在执行:
substr(to_char(to_date('01-02-2018','mm-dd-yyyy'), 'DD-MON-RR'),4,3)
因此,substr
作用于字符串02-JAN-18
,从第4个字符开始的3个字符是JAN
。
与其在约会中使用 substr
,不如使用 to_char
,例如:
to_char(to_date('01-02-2018', 'mm-dd-yyyy'), 'MON')
查询是:
select substr(to_date('01-02-2018','mm-dd-yyyy'),4,3) from dual;
输出是:
JAN
谁能解释一下输出是怎么来的?
当您将文本函数直接应用于 DATE 数据类型时,您会强制将日期隐式转换为字符串。此转换使用 NLS_DATE_FORMAT 参数来决定输出字符串的格式。
实际上,
substr(to_date('01-02-2018','mm-dd-yyyy'),4,3)
与
相同substr(to_char(to_date('01-02-2018','mm-dd-yyyy'), <NLS_DATE_FORMAT>),4,3)
NLS_DATE_FORMAT 参数的通常默认值(对于英文版本的数据库)是 DD-MON-RR
- 这听起来像是设置了 NLS_DATE_FORMAT 参数的值到,这意味着您的查询正在执行:
substr(to_char(to_date('01-02-2018','mm-dd-yyyy'), 'DD-MON-RR'),4,3)
因此,substr
作用于字符串02-JAN-18
,从第4个字符开始的3个字符是JAN
。
与其在约会中使用 substr
,不如使用 to_char
,例如:
to_char(to_date('01-02-2018', 'mm-dd-yyyy'), 'MON')