gpt4 book ai didi

使用 to_date 的 Oracle 日期比较不起作用

转载 作者:行者123 更新时间:2023-12-04 13:38:48 24 4
gpt4 key购买 nike

我在我的机器上使用 Oracle XE。
将表定义为:

Name       Type
ENAME VARCHAR2(20)
DOJ DATE

触发一个简单的选择:

select * from test1.tasty1;

ENAME                DOJ
sat 08-DEC-16

好的 - 我知道 DATE 字段中有时间部分。
以下使用 TRUNC 的查询工作正常:

select * from test1.tasty1 where trunc(DOJ) = '08-DEC-16';

现在我想测试“to_date”函数 - 但以下查询均无效 - 想知道为什么吗?

select * from test1.tasty1 where DOJ = to_date('08-12-2016','DD-MM-YYYY');
select * from test1.tasty1 where DOJ = to_date('08-DEC-2016','DD-MON-YYYY');
select * from test1.tasty1 where DOJ = to_date('08-DEC-16','DD-MON-YY');
select * from test1.tasty1 where DOJ = to_date('08-DEC-16','dd-mon-RR');

在 SO 上查看了以下内容:
Oracle TO_DATE not working

所以不确定这里出了什么问题?

最佳答案

从您的问题和评论来看,这似乎是事件发生的顺序。

您在表中执行了以下INSERT:

INSERT INTO test1.tasty1 VALUES ('sat', SYSDATE)

请记住,Oracle 中的日期同时包含日期时间部分。因此,即使您确实插入了日期 '2016-12-08',您插入了一个时间组件。因此,以下查询未返回任何记录:

SELECT * FROM test1.tasty1 WHERE DOJ = '2016-08-12'

这可能是因为您从未指定时间组件,因此您之前插入的记录不匹配。如果只想比较日期部分,可以使用 TRUNC,如下所示:

SELECT * FROM test1.tasty1 WHERE TRUNC(DOJ) = '2016-08-12'

如果您真的只想处理日期组件,那么解决您的问题的方法是在插入过程中用 TRUNC 包装 SYSDATE

顺便说一下,用作文字的格式 '08-DEC-16' 不会被 Oracle 识别为有效日期。而是使用 '2016-12-08'

关于使用 to_date 的 Oracle 日期比较不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41083202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com