繁体   English   中英

如何定义以下日期格式的日期格式掩码?

[英]How can I define the date format mask of the following date format?

我有一列带有以下日期(示例)的日期:

1.5.2018
24.2.2018
6.11.2018
13.10.2018

如果几天或几个月中缺少“ 0”,“ DD.MM.YYYY”格式可以处理吗? 如果没有:如何定义适当的日期格式掩码?

从Oracle有关格式模型的文档中:

外汇

格式准确。 此修饰符为TO_DATE函数的字符参数和日期时间格式模型指定完全匹配:

  • 字符参数中的标点和加引号的文本必须与格式模型的相应部分完全匹配(大小写除外)。
  • 字符参数不能有多余的空格。 没有FX,Oracle将忽略多余的空格。
  • character参数中的数值数据必须与格式模型中的相应元素具有相同的位数。 没有FX ,character参数中的数字可以省略前导零。
  • 启用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

'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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM