【发布时间】:2020-01-06 20:10:16
【问题描述】:
说我通常的日期格式是“14-jan-2019”,我希望我的日期只能被接受为“YYYY-MM-DD”,我该怎么做?我可以将 jan 更改为实际数字吗?
【问题讨论】:
-
这能回答你的问题吗? How are dates stored in Oracle?
-
日期列没有格式,不应与格式化的日期字符串混淆。
说我通常的日期格式是“14-jan-2019”,我希望我的日期只能被接受为“YYYY-MM-DD”,我该怎么做?我可以将 jan 更改为实际数字吗?
【问题讨论】:
在我看来,正确/正确的做法是将您的 date 列(或变量或其他任何内容)声明为 DATE,例如
create table test (date_column date);
或
declare
l_date_variable date;
begin
...
这样做,您可以让数据库处理有效值。
然后您就可以使用任何有效的日期格式掩码以任何方式输入数据,例如
to_date('06.01.2020', 'dd.mm.yyyy')
date '2020-01-06'
to_date('2020-06-01', 'yyyy-dd-mm')
等等。 - 所有这些值都是有效的。
【讨论】:
DATE 数据类型没有格式 - 它在内部存储为 7-bytes,代表年(2 个字节)和月、日、小时、分钟和秒(每个 1 个字节)。
'14-JAN-2019' 不是日期 - 它是文本文字。
如果要存储日期值,请使用 DATE 数据类型。
如果您只想接受特定格式的字符串作为输入,那么在您用来与数据库对话的任何用户界面中,都只接受该格式。如果您要将字符串转换为 DATEs 并想要一个精确的格式,那么您可以使用:
TO_DATE( '2019-01-14', 'fxYYYY-MM-DD' )
注意:fx 格式模型意味着准确的格式是预期的,典型的string-to-date conversion rules 将不会被应用。
【讨论】: