在ORACLE里面怎么将一个字符串转换成日期格式啊
比如将字符串‘2006-11-3’转换成日期2006-11-3
我在ORACLE存储过程中传进来一个参数startdate
内容是字符串2006-11-3
我用TO_DATE(StartDate,'YYYY-MM-DD')将其转换为日期格式
奇怪的是结果为:3-11月-06
怎么样才能把它转换成日期2006-11-3啊
比如将字符串‘2006-11-3’转换成日期2006-11-3
我在ORACLE存储过程中传进来一个参数startdate
内容是字符串2006-11-3
我用TO_DATE(StartDate,'YYYY-MM-DD')将其转换为日期格式
奇怪的是结果为:3-11月-06
怎么样才能把它转换成日期2006-11-3啊
解决方案 »
- Oracle查询问题,求帮一下忙!感谢!
- 修改 oracle 10g dbid
- 如何批量删除oracle中的重复的数据
- ORA-01555: 快照过旧: 回退段号 4 在名称为 "_SYSSMU4$" 过小
- 求助:用户权限与触发器创建
- TNSNAMES.ORA里的SERVICE_NAME到底是数据库中哪里设置的啊,服务名是指什么
- 请高手来看看,看起来简单的代码,却会出错
- Jdeveloper为什么连接oracle9i,连不上?有人确信能连接也给分,遇到过同样问题的也给分,最好能够解决问题。
- oracle转换java的时间戳
- EXP-00091: 正在导出有问题的统计信息 对数据的导入 和导出有没有影响???
- 求教:ORACLE多表联合查询的高效方法
- 一个小项目中的数据提取问题~
TO_CHAR(SYSDATE,'YYYY-MM-DD')
-----------------------------
2006-12-18
我这边执行很正常啊select TO_DATE('2006-12-18','YYYY-MM-DD') from dual;
---------------------------
2006-12-18
for example :
[email protected]>alter session set nls_date_format = 'yyyy/mm/dd hh24:mi:ss'
2 /会话已更改。[email protected]>select sysdate from dual;SYSDATE
-------------------
2006/12/19 09:38:[email protected]>alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';会话已更改。[email protected]>select sysdate from dual;SYSDATE
-------------------
2006-12-19 09:38:37
select TO_DATE('2006-11-3','YYYY-MM-DD') from dual;
运行后的结果为2006-11-3就是放到存储过程里就不行了。请问如何修改session啊,说具体点好吗?谢谢!
SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';Session alteredSQL> SELECT SYSDATE FROM DUAL;SYSDATE
-----------
2006-12-19
SQL> alter session set nls_date_format = 'yyyy-mm-dd';Session alteredSQL> select TO_DATE('2000-5-5','YYYY-MM-DD') from dual;TO_DATE('2000-5-5','YYYY-MM-DD
------------------------------
2000-5-5这说明是正常的吧但是我执行存储过程时:
SQL> exec REPORT_DY_YWTOTAL(0,'2006-11-3');begin REPORT_DY_YWTOTAL(0,'2006-11-3'); end;ORA-01722: 无效数字
ORA-06512: 在"CMAM.REPORT_DY_YWTOTAL", line 60
ORA-06512: 在line 1问题就是,我在跟踪测试时:
to_date('2006-11-3','yyyy-mm')
的值是:03-11月-06在其他的地方都是好的
就是在存储过程中就不行
真是出鬼了
lz自己看一下,是不是有串连接等方面的错误.或者,出错地方的上下几句代码都贴出来。
1.你的存储过程中的两个参数是什么类型的?
2.具体的报错位置是在过程的哪边 能贴出来 吗
create or replace procedure REPORT_DY_YWTOTAL
(DayOrMonth in number,
StartDate in varchar2
)我开始是这样串联的:sqladd_date := 'and EFFDATE = ' || TO_DATE(StartDate,'YYYY-MM-DD');sqladd_date 是作为SQL语句的一个补充部分
EFFDATE 是数据库里面的一个日期型字段,其中里面有一个值是2006-11-3
我现在是要查出这个日期的数据我开始也以为是串联有问题,我就改成了这样:
t date := TO_DATE(StartDate,'YYYY-MM-DD');
sqladd_date := 'and EFFDATE = ' || t;执行时:
SQL> exec REPORT_DY_YWTOTAL(0,'2006-11-3');begin REPORT_DY_YWTOTAL(0,'2006-11-3'); end;ORA-01722: 无效数字
ORA-06512: 在"CMAM.REPORT_DY_YWTOTAL", line 62
ORA-06512: 在line 1第一个参数是没有问题的
之所以是无效数字
是因为t的值变成了03-11月-06
而effdate的值是2006-11-3
所以无法比较然后我就直接写成:
t date := TO_DATE('2006-11-3','YYYY-MM-DD');
发现t的值仍然是03-11月-06但是,我在command window里面
SQL> select TO_DATE('2006-11-3','YYYY-MM-DD') from dual;TO_DATE('2006-11-3','YYYY-MM-DD
------------------------------
2006-11-3这是正常的,就是在存储过程里就不行了。非常感谢各位朋友关心我的问题,也希望我的问题能尽快解决!再次感谢各位!
时间字段,在不同的数据库软件中有不同的显示方式
在oracle 管理平台中就是你看到的那样
但是在toad中又是不同的显示方式
sqladd_date := 'and EFFDATE = ' || TO_DATE(StartDate,'YYYY-MM-DD');
对于动态的执行的sql.里面都是串连接的。TO_DATE(StartDate,'YYYY-MM-DD');在这里是不能使用的。
就用串连接就可以了。