TO_DATE('21-09-1989','DD-MM-YY') 和 TO_DATE('21-09-89','DD-MM-YY') 有什么区别?
What is the difference TO_DATE('21-09-1989','DD-MM-YY') and TO_DATE('21-09-89','DD-MM-YY')?
下面查询returns结果:
SELECT *
FROM EMPLOYEES
WHERE HIRE_DATE = TO_DATE('21-09-1989','DD-MM-YY');
好像我将日期从 21-09-1989 更改为 21-09-89 returns 什么都没有。
SELECT *
FROM EMPLOYEES
WHERE HIRE_DATE = TO_DATE('21-09-89','DD-MM-YY');
这里有什么问题?
如果您使用 YY
作为年份,那么它 returns 是当前世纪的年份,即 2000-2099
。你的情况 -- 2089
如果您使用 YYYY
,则会返回准确的年份。 -- 在你的情况下 1989
如果您使用 RR
,则返回 1950-2049
之间的年份。 -- 在你的情况下 1989
所以
TO_DATE('21-09-1989','DD-MM-YY') --> 21-09-1989
-- oracle is smart to detect the given format as YYYY
TO_DATE('21-09-89','DD-MM-YY') --> 21-09-2089
-- as 2089 is between 2000-2099
TO_DATE('21-09-89','DD-MM-RR') --> 21-09-1989
-- as 1989 is between 1950-2049
TO_DATE('21-09-89','DD-MM-YY')
评估到 2089 年 9 月 21 日
正如其他答案中关于 'YY'
和 'YYYY'
格式之间的区别及其含义所解释的那样。您可以使用 ANSI DATE 文字 :
轻松避免问题
DATE '1989-09-21'
ANSI 日期文字不包含时间部分,必须完全按照这种格式指定 ('YYYY-MM-DD')
。
另外,HIRE_DATE
是一种 DATE 数据类型,它也有一个 时间部分 。因此,您的 WHERE 条件可能 return 不正确的值:
WHERE HIRE_DATE = TO_DATE('21-09-1989','DD-MM-YY')
要删除时间部分,您必须使用 TRUNC 仅与日期部分进行比较:
WHERE TRUNC(HIRE_DATE) = DATE '1989-09-21'
下面查询returns结果:
SELECT *
FROM EMPLOYEES
WHERE HIRE_DATE = TO_DATE('21-09-1989','DD-MM-YY');
好像我将日期从 21-09-1989 更改为 21-09-89 returns 什么都没有。
SELECT *
FROM EMPLOYEES
WHERE HIRE_DATE = TO_DATE('21-09-89','DD-MM-YY');
这里有什么问题?
如果您使用 YY
作为年份,那么它 returns 是当前世纪的年份,即 2000-2099
。你的情况 -- 2089
如果您使用 YYYY
,则会返回准确的年份。 -- 在你的情况下 1989
如果您使用 RR
,则返回 1950-2049
之间的年份。 -- 在你的情况下 1989
所以
TO_DATE('21-09-1989','DD-MM-YY') --> 21-09-1989
-- oracle is smart to detect the given format as YYYY
TO_DATE('21-09-89','DD-MM-YY') --> 21-09-2089
-- as 2089 is between 2000-2099
TO_DATE('21-09-89','DD-MM-RR') --> 21-09-1989
-- as 1989 is between 1950-2049
TO_DATE('21-09-89','DD-MM-YY')
评估到 2089 年 9 月 21 日
正如其他答案中关于 'YY'
和 'YYYY'
格式之间的区别及其含义所解释的那样。您可以使用 ANSI DATE 文字 :
DATE '1989-09-21'
ANSI 日期文字不包含时间部分,必须完全按照这种格式指定 ('YYYY-MM-DD')
。
另外,HIRE_DATE
是一种 DATE 数据类型,它也有一个 时间部分 。因此,您的 WHERE 条件可能 return 不正确的值:
WHERE HIRE_DATE = TO_DATE('21-09-1989','DD-MM-YY')
要删除时间部分,您必须使用 TRUNC 仅与日期部分进行比较:
WHERE TRUNC(HIRE_DATE) = DATE '1989-09-21'