1)为什么这不起作用?
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)但是字符串的比较确实有效:
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点。
发布于 2015-09-16 19:43:58
DATE数据类型没有格式--它只是一个数字。因此,2015年8月25日至8月15日的DATE和DATE 25/AUG/15以及DATE 2015-08-15是一样的,因为它是相同的DATE。
另一方面,字符串是字符的集合,因此'25-Aug-2015'明显不同于'25/AUG/15'。
在第一个示例中,您正在比较DATE值。在第二个例子中,您正在比较字符串。
发布于 2015-09-16 20:01:32
因此,您有一个类型为DATE的字段,值为,值为2015年8月25日的,但它可以以不同的方式可视化,实际上它被命名为格式。
DATE有格式!DATE具有由甲骨文定义的隐式格式,在您的示例中是DD-MON,因为您认为您的字段为25-8月15日。
您可以在不进行TO_DATE转换的情况下选择数据,只需匹配如下所示的默认格式:
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)。
https://stackoverflow.com/questions/32616127
复制相似问题