我的格式为2005-01-31T00:00:00.000-05:00
的时间戳值。我想将它转换为格式为20050131
的数字,以将其等同于数据类型为数字的列。
我试图通过to_number(to_date(timestamp, 'yyyymmdd'))
来做到这一点。但它导致错误not a valid month
。
请你帮我解决一下。
答案 0 :(得分:0)
尝试使用如下
to_number(to_char(timestamp, 'yyyymmdd'))
首先你必须转换为char然后转换为数字。
答案 1 :(得分:0)
如果您的时间戳值为VARCHAR2
,则可能会有所帮助:
WITH tstmp AS (
SELECT '2005-01-31T00:00:00.000-05:00' AS val FROM dual
)
SELECT TO_NUMBER(TO_CHAR(FROM_TZ(TO_TIMESTAMP(SUBSTR(val, 1, 23), 'YYYY-MM-DD"T"HH24:MI:SS.FF3'), SUBSTR(val, 24)) , 'YYYYMMDD')) AS newval
FROM tstmp;