我有一列带有字段字符串(VARCHAR) EX:201207我正在尝试转换为日期,但问题是有些字段的格式为 201207,有些字段的格式为 20120725 其中还包括日期 TO_Date(201207,YYYYMM) 对于具有日期的字段失败,反之亦然。
Columns representation
201207
201208
20120925
.....
迄今为止的转换
简单的 ISO 日期可以像这样解析:SELECT DATE ('1990-02-09') FROM sysibm.sysdummy1;
数字日期可以通过使用标量函数并添加格式文本作为第二个参数来解析TO_DATE
:SELECT TO_DATE('199002', 'YYYYMM') FROM sysibm.sysdummy1;
TO_DATE
:返回已使用字符模板解释的字符串中的时间戳。TO_DATE
是TIMESTAMP_FORMAT
的同义词。
取决于大小写
要考虑您的 2 个输入案例,只需添加一个测试LENGTH
的 CASE 表达式:
SELECT CASE
WHEN LENGTH(col) = 6 THEN TO_DATE(col, 'YYYYMM')
WHEN LENGTH(col) = 8 THEN TO_DATE(col, 'YYYYMMDD')
ELSE DATE(col)
END as dt
FROM sysibm.sysdummy1;
参见
- 在 DB2 中将 dd-mon-yy 字符串转换为日期
- 在 DB2 中将十进制转换为日期
- https://developer.ibm.com/articles/fun-with-dates-and-times/
- https://www.ibmmainframer.com/db2-tutorial/db2-sql-date-time-functions/