我正在写这样的查询
select * from tablename where date between '27-mar-2015' and '1-apr-2015'
。
但未从oracle数据库日期类型'1-apr-2015'
检索到日期为TIMESTAMP(6)
的记录。
答案 0 :(得分:2)
在2015年3月27日之间'和' 1-apr-2015'
' 27-MAR-2015'不是日期,它是一个字符串文字。您正在强制Oracle进行隐式数据类型转换。
日期类型是TIMESTAMP(6)
由于您的数据类型是 TIMESTAMP ,因此您需要处理TIMESTAMP数据类型的精度,该数据类型将小数秒保持在0到9位小数之间的精度,默认值为6。
BETWEEN
to_timestamp('27-mar-2015 01.01.01.000001','dd-mon-yyyy HH24:MI:SS.FF')
AND
to_timestamp('01-apr-2015 23.59.59.999999','dd-mon-yyyy HH24:MI:SS.FF')
例如,
SQL> ALTER SESSION SET nls_timestamp_tz_format = 'DD-MON-YYYY HH24:MI:SS.FF';
Session altered.
SQL> SELECT
2 to_timestamp('27-mar-2015 01.01.01.000001','dd-mon-yyyy HH24:MI:SS.FF') st,
3 to_timestamp('01-apr-2015 23.59.59.999999','dd-mon-yyyy HH24:MI:SS.FF') end
4 FROM dual
5 /
ST END
---------------------------------- ----------------------------------
27-MAR-15 01.01.01.000001000 AM 01-APR-15 11.59.59.999999000 PM
SQL>
答案 1 :(得分:1)
您必须注意timestamp
- 列(以及oracle甚至date
- 列)始终包含时间,而date '1-apr-2015'
实际上意味着'1-apr-2015 00:00:00'
- 然后一切都有道理。时间戳的确切字符串表示可能会根据配置的区域设置而有所不同。
要获得包括4月1日的日期,如果您不介意包含当天的第一个微秒,那么最好使用between ... and '2-apr-2015'
。
答案 2 :(得分:0)
尝试转换为to_date:
select * from tablename
where date between to_Date('27-mar-2015','dd-mm-yyy')
and to_date('1-apr-2015','dd-mm-yyyy')
答案 3 :(得分:0)
我遇到了同样的问题。使用 TRUNC 日期函数有所帮助。
select * from tablename where trunc(date,'DAY') between '27-mar-2015' and '1-apr-2015'
答案 4 :(得分:-1)
尝试使用此代码:
select * from tablename where to_date(date,'DD-MON-YYYY') between '27-mar-2015' and '1-apr-2015'.