首页 > 解决方案 > 如何将具有日期数据类型的列格式化为 YYYY-MM-DD

问题描述

我正在创建一个新表,我需要一个数据类型为 DATE 的列在初始化该列时具有格式 YYYY-MM-DD。我使用了 CHECK TO_DATE() 但我收到一条错误消息,这可能来自我在表中输入值的方式?

我试过 my_date DATE CHECK (my_date = TO_DATE(my_date,'YYYY-MM-DD')

CREATE TABLE my_table(mytable_id VARCHAR(2) PRIMARY KEY
          my_date DATE NOT NULL
          CHECK (my_date = TO_DATE(my_date,'YYYY-MM-DD')));

INSERT INTO my_table VALUES('01','2019-09-28');
SELECT * FROM my_table;

我期望我的列和行,但相反,它给了我一条错误消息 ORA-01861:文字与格式字符串不匹配。我尝试了几种方法,但没有任何效果。谢谢您的帮助。

标签: oraclesqlplus

解决方案


在您的架构my_date中已经是日期,您无法将日期转换为日期,此行没有意义:

my_date DATE NOT NULL
CHECK (my_date = TO_DATE(my_date,'YYYY-MM-DD')));

您可以写入to_date将字符串转换为日期:

INSERT INTO my_table VALUES('01',TO_DATE('2019-09-28'));

您应该了解 Oracle 不date以字符串格式存储,Oracledate以内部二进制格式存储,因此,您应该从字符串转换为date.

如果要在输出时格式化日期,方法是使用to_char

select to_char( my_date, 'YYYY-MM-DD' ) as myFormatedDate
from my_table;

推荐阅读