有一个date类型的字段,我想比较日期相等的情况,只比较日期、忽略时间。以下两种情况都能得出正确的比较结果:(忽略字段值的时间,如2010/12/20 15:14:12)
1、MyDate >= '20101220'->查出日期大于等于2010.12.20的记录。
2、MyDate <= '20101220'->查出日期小于2010.12.20的记录,注意是小于而不是小于等于。也就是说跟MyDate < '20101220'结果一样。但是写这样的语句查到的记录数总是0:MyDate = '20101220'。根据上面的说法,这个也查不出来的:MyDate >= '20101220' AND MyDate <= '20101220'请问,怎么比较日期相同的情况呢?前提是不用to_date,to_char转换。
1、MyDate >= '20101220'->查出日期大于等于2010.12.20的记录。
2、MyDate <= '20101220'->查出日期小于2010.12.20的记录,注意是小于而不是小于等于。也就是说跟MyDate < '20101220'结果一样。但是写这样的语句查到的记录数总是0:MyDate = '20101220'。根据上面的说法,这个也查不出来的:MyDate >= '20101220' AND MyDate <= '20101220'请问,怎么比较日期相同的情况呢?前提是不用to_date,to_char转换。
--给你看个例子
scott@YPCOST> select hiredate from emp;HIREDATE
-------------------
1980-12-17 00:00:00
1981-02-20 00:00:00
1981-02-22 00:00:00
1981-04-02 00:00:00
1981-09-28 00:00:00
1981-05-01 00:00:00
1981-06-09 00:00:00
1987-04-19 00:00:00
1981-11-17 00:00:00
1981-09-08 00:00:00
1987-05-23 00:00:00
1981-12-03 00:00:00
1981-12-03 00:00:00
1982-01-23 00:00:00已选择14行。scott@YPCOST> select * from emp where hiredate='1980-12-17'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 900 20scott@YPCOST> select * from emp where hiredate='19801217'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 900 20scott@YPCOST> select * from emp where hiredate='1980/12/17'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 900 20
--我这样查询都没问题的
请问你的是Oracle数据库吗?我的是date字段,如果输入1980-12-17 00:00:00这样中间带“-”的值,会报错的。
我换成了MyDate = '2010-12-20'还是查不出来。跟不加入“-”完全一样的效果。
肯定查不到啊oracle隐式类型转换把你的时间20101202转成了2010-10-20 00:00:00但是你的mydate字段是有时分秒的,怎么会相等呢?你只有把你的mydate改成trunc(mydate)就可以了
但是我这里是动态过滤数据,表名、字段名都动态获取,而字段的类型又取不到,所以在拼条件的时候,无法判断哪个字段是date类型,也就无法知道在哪里应该用to_char trunc,to_date来转换了。其他类型的字段都没问题,就这个date的“等于”判断不出来。
我才发现,如果把date的字段值改在 2010/10/10 00:00:00的话,数据库保存的时候会自动把00:00:00去掉。这个时候再用MyDate = '20101220'就能查出来了。
看来得换个思路做了。
小的不才,接触Oracle不久感谢各位大侠的帮忙了。
MyDate = '20101220 01:01:01'
或者修改你表里的数据 把小时,分,秒去掉
要么在=号前加to_date/to_char/trunc或者在=号后加to_date/to_char/trunc,
要么能算出具体的值
改为
MyDate >= To_Date( '20101220', 'YYYYMMDD' ) AND MyDate <= To_Date( '20101220', 'YYYYMMDD' )
就OK了!你原来的写法是日期类型与字符类型进行比较,当然返回不了你想要的数据!
我的库里存的是年月日时分秒,但是比较的时候只取年月日,用>=能把当天的取出来
用<=就取不到,后来才知道,要么转换成date再比,要么用<=的时候把后面的值加一天
你用colvalue>=20101010是可以的,但是colvalue<=20101010就查不出来