【发布时间】:2020-06-08 12:40:22
【问题描述】:
我有一个日期字段,它以'19-JAN-20' 格式显示日期我想使用oracle 数据库将其显示为'January 2019'。
select '19-JAN-19' FROM DUAL
【问题讨论】:
我有一个日期字段,它以'19-JAN-20' 格式显示日期我想使用oracle 数据库将其显示为'January 2019'。
select '19-JAN-19' FROM DUAL
【问题讨论】:
您需要使用TO_CHAR以所需格式显示:
select to_char(DATE '2019-01-20', 'Month YYYY') dt from dual;
DT
-------------
January 2019
从 DUAL 中选择“19-JAN-19”
该声明有几个问题:
'19-JAN-19' 是字符串,而不是日期。始终使用 TO_DATE 将其显式转换为日期,或者像我在演示中使用的那样坚持 ANSI 日期文字。
不要使用 两位数 YY 表示年份,这就是引入 Y2K 错误的原因。始终使用YYYY。
【讨论】:
看起来像嵌套的TO_CHAR,如果您提到的“日期”值 - 19-JAN-20 存储为字符串:
SQL> with test (col) as
2 (select '19-JAN-20' from dual)
3 select
4 to_char(
5 to_date(col, 'dd-mon-yy', 'nls_date_language = english'),
6 'fmMonth yyyy', 'nls_date_language = english'
7 ) result
8 from test;
RESULT
--------------
January 2020
SQL>
如果您的数据库说英语,您可以省略 NLS_DATE_LANGUAGE 部分(我说克罗地亚语,所以我把它包括在内)。
但是,如果它是一个 日期,您只想以不同的方式显示,那么:
(只是为了避免在TO_DATE中出现NLS_DATE_LANGUAGE):
SQL> alter session set nls_date_language = 'english';
Session altered.
我的数据库中的默认格式:
SQL> select sysdate from dual;
SYSDATE
--------
08.06.20
将会话更改为所需的格式:
SQL> alter session set nls_date_format = 'fmMonth yyyy';
Session altered.
SQL> select sysdate from dual;
SYSDATE
--------------
June 2020
或者,应用带有所需格式掩码的TO_DATE 函数:
SQL> select to_char(sysdate, 'fmMonth yyyy') result from dual;
RESULT
--------------
June 2020
SQL>
【讨论】: