ORACLE TO_CHAR的一个问题
生活随笔
收集整理的这篇文章主要介绍了
ORACLE TO_CHAR的一个问题
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
在完成一个PL/SQL程序的时候,发现我写个一个DECODE判断总是返回一个值,有问题。那个判断的细节是,只要某个日期为所在周的周一,返回1,否则返回0.
例如:
select decode(to_char(to_date(to_char(sysdate, 'yy') || '0714', 'yymmdd'),'day', 'NLS_DATE_LANGUAGE = American'),
'monday',1,0)
from dual;
这是应该返回1,但是运行该SQL,却总是返回0。
奇怪,怎么搞的。赶快测试了一下长度:
select length(to_char(TO_DATE(TO_CHAR(SYSDATE, 'yy') ||
'0714',
'yymmdd'),
'day',
'NLS_DATE_LANGUAGE = American')) from dual;
返回的长度让我吃惊:9!
不是我想的6!
于是我在SQL上加了一个TRIM处理
select length(trim(to_char(to_date(to_char(sysdate, 'yy') || '0714', 'yymmdd'),
'day',
'NLS_DATE_LANGUAGE = American')))
from dual;
终于返回了6!
于是罗列了一下英文的周一到周日,正好周三(Wednesday)是9个长!
试了试返回月份的效果,一样,都是9个长。
试试中文的效果:
select lengthb(to_char(to_date('20090707', 'yymmdd'), 'day')) from dual;
返回了6!和英文的长度不同。然后又测试了月
select lengthb(to_char(to_date('20090707', 'yymmdd'), 'month')) from dual;
并没有返回6而是4!就是说,象上句,返回的值是'7月 '还是一个带有空格的定长!考虑到12月就应该有一个空格了 -:)
又和空格纠缠了一把!奇怪ORACLE的返回还是定长。
如果以后在PL/SQL中有这样的操作一定要多多注意,非常小心,尤其含有地区或者语言处理的,所以我常常会选择强制语言再返回信息【'NLS_DATE_LANGUAGE = American'】防止因为程序运行环境不同而造成返回的信息不同,而使程序运行出错。
-:)
-----------------------
ORACLE测试环境:10.2.0.1
9.2.0.4
例如:
select decode(to_char(to_date(to_char(sysdate, 'yy') || '0714', 'yymmdd'),'day', 'NLS_DATE_LANGUAGE = American'),
'monday',1,0)
from dual;
这是应该返回1,但是运行该SQL,却总是返回0。
奇怪,怎么搞的。赶快测试了一下长度:
select length(to_char(TO_DATE(TO_CHAR(SYSDATE, 'yy') ||
'0714',
'yymmdd'),
'day',
'NLS_DATE_LANGUAGE = American')) from dual;
返回的长度让我吃惊:9!
不是我想的6!
于是我在SQL上加了一个TRIM处理
select length(trim(to_char(to_date(to_char(sysdate, 'yy') || '0714', 'yymmdd'),
'day',
'NLS_DATE_LANGUAGE = American')))
from dual;
终于返回了6!
于是罗列了一下英文的周一到周日,正好周三(Wednesday)是9个长!
试了试返回月份的效果,一样,都是9个长。
试试中文的效果:
select lengthb(to_char(to_date('20090707', 'yymmdd'), 'day')) from dual;
返回了6!和英文的长度不同。然后又测试了月
select lengthb(to_char(to_date('20090707', 'yymmdd'), 'month')) from dual;
并没有返回6而是4!就是说,象上句,返回的值是'7月 '还是一个带有空格的定长!考虑到12月就应该有一个空格了 -:)
又和空格纠缠了一把!奇怪ORACLE的返回还是定长。
如果以后在PL/SQL中有这样的操作一定要多多注意,非常小心,尤其含有地区或者语言处理的,所以我常常会选择强制语言再返回信息【'NLS_DATE_LANGUAGE = American'】防止因为程序运行环境不同而造成返回的信息不同,而使程序运行出错。
-:)
-----------------------
ORACLE测试环境:10.2.0.1
9.2.0.4
转载于:https://blog.51cto.com/miracle/88173
总结
以上是生活随笔为你收集整理的ORACLE TO_CHAR的一个问题的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: mysql问答汇集
- 下一篇: SBO中流程控制功能的实现-SBO_SP