首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle日期比较作为字符串和日期

Oracle日期比较作为字符串和日期
EN

Stack Overflow用户
提问于 2015-09-16 18:33:28
回答 2查看 74关注 0票数 0

1)为什么这不起作用?

代码语言:javascript
复制
select * from table where trunc(field1)=to_date('25-AUG-15','DD-MON-YY');

select * from table where trunc(field1)=to_date('25/Aug/15','DD/MON/YY');

在上述情况下将返回行。

那么,这是否意味着无论field1中有什么格式的日期,如果它是有效日期并与8月25日匹配,那么它将被返回(它不会关心我们在查询的右侧指定了什么格式说明符,即DD-MON或DD/MON/YY或其他任何内容)吗?

2)但是字符串的比较确实有效:

代码语言:javascript
复制
select * from table where to_char(field1)=to_char(to_date     

('25/AUG/15','DD/MON/YY'), 'DD/MON/YY');

在准确执行比较时,不返回任何行。

我将field1设置为‘25-8月-15’(尽管使用alter NLS_DATE_FORMAT.

field1是日期类型的

对理解这一点的任何帮助都是非常感谢的,特别是关于第1点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-16 19:43:58

DATE数据类型没有格式--它只是一个数字。因此,2015年8月25日至8月15日的DATEDATE 25/AUG/15以及DATE 2015-08-15是一样的,因为它是相同的DATE

另一方面,字符串是字符的集合,因此'25-Aug-2015'明显不同于'25/AUG/15'

在第一个示例中,您正在比较DATE值。在第二个例子中,您正在比较字符串。

票数 3
EN

Stack Overflow用户

发布于 2015-09-16 20:01:32

因此,您有一个类型为DATE的字段,值为,值为2015年8月25日的,但它可以以不同的方式可视化,实际上它被命名为格式。

DATE有格式!DATE具有由甲骨文定义的隐式格式,在您的示例中是DD-MON,因为您认为您的字段为25-8月15日。

您可以在不进行TO_DATE转换的情况下选择数据,只需匹配如下所示的默认格式:

代码语言:javascript
复制
select * from table where trunc(field1)='25-AUG-15';

事实上,这是不建议的,因为如果有人将更改默认格式,Oracle将无法理解您将告诉他一个DATE。

因此,本例中的to_date转换:

从trunc(field1)=to_date('25/AUG/15',‘DD/MON/YY’)的表中选择*;

用于指定要向甲骨文通知DATE类型,其值为2015年8月25日的25,使用不同的格式,指定为第二个参数。(本例为DD/MM/YY)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32616127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档