我有一列带有以下日期的列(示例):
1.5.2018
24.2.2018
6.11.2018
13.10.2018
如果几天或几个月中缺少“ 0”,“ DD.MM.YYYY”格式可以处理吗?如果没有,如何定义合适的日期格式掩码?
答案 0 :(得分:3)
来自Oracle有关格式模型的文档:
FX
格式准确。此修饰符为
TO_DATE
函数的字符参数和日期时间格式模型指定完全匹配:
- character参数中的标点和加引号的文本必须与格式模型的相应部分完全匹配(大小写除外)。
- 字符参数不能有多余的空格。没有FX,Oracle将忽略多余的空格。
- character参数中的数字数据必须与格式模型中的相应元素具有相同的位数。如果没有
FX
,字符参数中的数字可以省略前导零。- 启用
FX
时,也可以使用FM
修饰符来禁用对前导零的检查。
没有FX
格式模型:
SELECT TO_DATE( '1.5.2018', 'DD.MM.YYYY' ) AS value FROM DUAL;
将正常工作并输出(使用我的NLS_DATE_FORMAT
设置):
VALUE
--------------------
2018-05-01T00:00:00Z
,带有多余空格的组合也将如此:
SELECT TO_DATE( '1 . 5 . 2018', 'DD.MM.YYYY' ) FROM DUAL;
使用FX
格式模型:
SELECT TO_DATE( '1.5.2018', 'FXDD.MM.YYYY' ) AS value FROM DUAL;
礼物:
ORA-01862: the numeric value does not match the length of the format item
指定前导零将起作用:
SELECT TO_DATE( '01.05.2018', 'FXDD.MM.YYYY' ) FROM DUAL;
VALUE
--------------------
2018-05-01T00:00:00Z
但是添加多余的空格不会:
SELECT TO_DATE( '01 . 05. 2018', 'FXDD.MM.YYYY' ) FROM DUAL;
ORA-01861: literal does not match format string
要取消检查前导零,您还可以使用FM
格式模型:
SELECT TO_DATE( '1.5.2018', 'FMFXDD.MM.YYYY' ) FROM DUAL;
哪个输出:
VALUE
--------------------
2018-05-01T00:00:00Z
但是该语句不能使用多余的空格
SELECT TO_DATE( '1.5 .2018', 'FMFXDD.MM.YYYY' ) FROM DUAL;
ORA-01861: literal does not match format string
答案 1 :(得分:1)
'DD.MM.YYYY'
格式将起作用。例如:
SQL> with yourData(stringDateCol) as (
2 select '1.5.2018' from dual union all
3 select '01.05.2018' from dual union all
4 select '24.2.2018' from dual union all
5 select '6.11.2018' from dual union all
6 select '13.10.2018' from dual
7 )
8 select to_date( stringDateCol, 'dd.mm.yyyy')
9 from yourData;
TO_DATE(ST
----------
2018-05-01
2018-05-01
2018-02-24
2018-11-06
2018-10-13
SQL>