【发布时间】:2020-01-22 06:28:52
【问题描述】:
我有一个数据类型为NUMBER(32,0) 的列。此列实际上存储来自应用程序的日期和时间戳。
我需要将此number 数据类型列导出为date。
即,
select column_name from table_name;
o/p:
1368046452000
我尝试使用此选项导出为日期,
SELECT TO_DATE(
TO_TIMESTAMP('1970-01-01'
,'YYYY-MM-DD'
) + NUMTODSINTERVAL(column_name/1000, 'SECOND')
,'YYYY-MM-DD')
FROM table_name;
它给了我预期的输出"15-JUL-23"。
问题:
这张表有大约 900 多列,其中 50 多列就像这个数字 data_type 一样,其中存储了日期和时间。我需要将这 50 多列转换/格式化为YYYY-MM-DD。
如何从表中获取/导出/选择所有列值,其中上述数字 data_type 列应以YYYY-MM-DD 格式返回?
请帮忙!!
谢谢, 卡提克
【问题讨论】:
-
900 多列。你是认真的?日期存储为数字,你是认真的吗?
-
如果您要创建一个新表,您可以从当前表的选择中创建具有适当类型的表。或者您可以创建具有适当类型的视图/物化视图。您是否正在更改应用程序以在将来插入正确的日期类型?
-
@AnkitBajpai,是的。该表有 900 多列,50 多列是数字数据类型,它以数字形式存储日期和时间。只需将这些数字数据类型值导出为日期格式。你能帮忙吗?
-
@ZynonPutneyII。我们没有触及当前表,因为这些表直接由应用程序前端使用,我们现在和将来都不会更改当前表。我只需要使用 sql devoper 将存储在数字数据类型中的日期和时间值导出为 DATE 格式。请推荐!
-
不要在已经是
DATE(或TIMESTAMP)数据类型的东西上使用TO_DATE,因为TO_DATE需要一个字符串作为其第一个参数,然后当默认日期到字符串格式与您的显式YYYY-MM-DD格式不匹配(db<>fiddle 及其默认值会为您的查询提供ORA-01858异常)。如果要将TIMESTAMP转换为DATE,请使用CAST( value AS DATE )。