发现插入DB后的日期类型数据都是YYYY/MM/DD的
现在我把这数据查出来,不作任何转换的话,数据格式也是
YYYY/MM/DD吗?
PS:我插入的时候有可能是“YYYYMMDD”或“YYYY-MM-DD”呀“YY—M—D”等等等等的形工插入!第二个问题
同样是2010/06/23
(A)一个格式是YYYY/MM/DD,(B)一个是YYYY-MM-DD
现在我直接A=B这个判断能成立吗?
现在我把这数据查出来,不作任何转换的话,数据格式也是
YYYY/MM/DD吗?
PS:我插入的时候有可能是“YYYYMMDD”或“YYYY-MM-DD”呀“YY—M—D”等等等等的形工插入!第二个问题
同样是2010/06/23
(A)一个格式是YYYY/MM/DD,(B)一个是YYYY-MM-DD
现在我直接A=B这个判断能成立吗?
如果Varchar2类型,那么只能插入字符串,而且下次取的时候还是原来字符串。不会变化
如果是Date类型,那么只能插入浮点数,而且因设置不同,查询时显示的内容也不同。但其日期值不变。
应该补一补课。
-- 所以日期字段 相比较,要不用 trunc(a.date_column)=trunc(b.date_column)
-- trunc 的意思是把日期字段截断到当日的起始时间 :如: '2010-06-23 00:00:00 0000'
-- 或者用 to_char() 函数,将其转换成字符型来进行比较!-- 但是你若是要查日期区间的话,一般不需要用函数,如:
-- 查询某个字段(日期) 在 2005-06-01 到 2005-06-11 (包括这两天),可用如下语句:
where date_column >= to_date('2005-06-01','YYYY-MM-DD')
and date_column < to_date('2005-06-12','YYYY-MM-DD');-- 为了提高查询语句的效率,函数尽量用到 条件不等式 的 右边!-- 这样:若此字段有索引的话,将可能会用到此索引!,但是如果你左边有函数,此索引可能无法用上!
2题答案:是相等的,下面是例子。
SQL> declare
2 a date;
3 b date;
4 begin
5 a:=to_date('2010/06/23
6 ','yyyy/mm/dd');
7 b:=to_date('2010-06-23','yyyy-mm-dd');
8 if a=b then
9 dbms_output.put_line(1);
10 else
11 dbms_output.put_line(0);
12 end if;
13 end;
14 /PL/SQL 过程已成功完成。SQL> set serveroutput on
SQL> /
1PL/SQL 过程已成功完成。1题答案:
SQL> alter session set nls_date_format='yyyy/mm/dd';会话已更改。SQL> select sysdate from dual;SYSDATE
----------
2010/06/26
我也遇到过这样的问题,XP下装10g的库格式是yyyy-mm-dd,到WIN7下就是yyyy/mm/dd.不知道是不是跟系统有点关系.