oracle关于length和vsize函数的一些感想
来源:互联网 发布:python json 汉字 编辑:程序博客网 时间:2024/04/28 12:19
oracle关于length和vsize函数的一些感想
有时候我们判断一个入参或者值是否存在会通过它的长度来判断。下面就谈谈在oracle中的使用(本人所遇到的一些情况,仅供参考):
先描述下我要写的一个过程:根据开始月份和结束月份做一个回款统计报表。
再上代码:
最后进入正文:
入参为两个长度为6的月份。当然时间不能是任意的,所以要做个时间合法性校验。
起初的时候就做了个校验:1.时间的长度为6; 2.结束月份不能小于开始月份 3.不能跨年
有人就说了这有什么?没错,这确实没什么。如果这样就够了,那么就没有本文了。可能有人会问,入参不能未空。确实,这个我也有想到,看32行
if (p_e_len!=6) or (p_e_len!=6) then
...
end if;
我也是相当然的以为没有入参,那么这里校验就不会通过。可是我错了,大错特错。
实际运行过程中,如果两个时间的入参都不传。那么直接跳过该if判断,进入到else中。
首先来看一下语句:select length(null) from dual;
没有任何值。
是否有人疑问,空不就是0吗?不急,接着往下看。
再看23行:
if (i_begin_date is null) or (i_end_date is null) then
。。。。。
end if;
同样,两个入参不传,进入到了“。。。。。”中。
由此可推断 select length(null) fro dual的结果为null。
那么0和null是否能画上等号呢?
if 0 is null then
o_msg :='0等于null';
else
o_msg :='0不等于null';
end if;
测试结果为: 0不等于null
为毛?
这是有oracle本身决定的,不做解释。
2.到这,本文的内容基本讲完了。说到计算长度,还有个函数也应该认识一下:vsize()。
--------------------------------------------------------------------------
这又是为嘛?
length函数计算字符串的实际长度,
vsize计算的则是字符串的实际存储空间(字节)。
所以才会有 vsize('ni中 ma') 等于7而不是6。(我的数据库编码格式为GBK,如果是utf-8的话,就是8字节了[一个中文字符为3字节])。
vsize通常在截取字符串的时候很有用。
3.有个有点牛叉叉sql大家可以探讨一下:
select vsize(sysdate) from dual; 为多少字节?
-----------------------------------
-----------------------------------
为毛等于7?不应该是9吗?会不会把sysdate当做字符串处理了?
所以我想是想多了。
看看下面这个:
是不是有多感悟?开来是在把系统时间转为字符串的时候出现问题了。
注意观察为什么会有两条短线(-),是不是因为我们没有指定格式,它会有个默认的日期格式呢?
这个我谷哥、度娘了找了好久没找到答案。水平有限啊。
有时候我们判断一个入参或者值是否存在会通过它的长度来判断。下面就谈谈在oracle中的使用(本人所遇到的一些情况,仅供参考):
先描述下我要写的一个过程:根据开始月份和结束月份做一个回款统计报表。
再上代码:
最后进入正文:
入参为两个长度为6的月份。当然时间不能是任意的,所以要做个时间合法性校验。
起初的时候就做了个校验:1.时间的长度为6; 2.结束月份不能小于开始月份 3.不能跨年
有人就说了这有什么?没错,这确实没什么。如果这样就够了,那么就没有本文了。可能有人会问,入参不能未空。确实,这个我也有想到,看32行
if (p_e_len!=6) or (p_e_len!=6) then
...
end if;
我也是相当然的以为没有入参,那么这里校验就不会通过。可是我错了,大错特错。
实际运行过程中,如果两个时间的入参都不传。那么直接跳过该if判断,进入到else中。
首先来看一下语句:select length(null) from dual;
没有任何值。
是否有人疑问,空不就是0吗?不急,接着往下看。
再看23行:
if (i_begin_date is null) or (i_end_date is null) then
。。。。。
end if;
同样,两个入参不传,进入到了“。。。。。”中。
由此可推断 select length(null) fro dual的结果为null。
那么0和null是否能画上等号呢?
if 0 is null then
o_msg :='0等于null';
else
o_msg :='0不等于null';
end if;
测试结果为: 0不等于null
为毛?
这是有oracle本身决定的,不做解释。
2.到这,本文的内容基本讲完了。说到计算长度,还有个函数也应该认识一下:vsize()。
--------------------------------------------------------------------------
这又是为嘛?
length函数计算字符串的实际长度,
vsize计算的则是字符串的实际存储空间(字节)。
所以才会有 vsize('ni中 ma') 等于7而不是6。(我的数据库编码格式为GBK,如果是utf-8的话,就是8字节了[一个中文字符为3字节])。
vsize通常在截取字符串的时候很有用。
3.有个有点牛叉叉sql大家可以探讨一下:
select vsize(sysdate) from dual; 为多少字节?
-----------------------------------
-----------------------------------
为毛等于7?不应该是9吗?会不会把sysdate当做字符串处理了?
所以我想是想多了。
看看下面这个:
是不是有多感悟?开来是在把系统时间转为字符串的时候出现问题了。
注意观察为什么会有两条短线(-),是不是因为我们没有指定格式,它会有个默认的日期格式呢?
这个我谷哥、度娘了找了好久没找到答案。水平有限啊。
- oracle关于length和vsize函数的一些感想
- Oracle的函数vsize和length的区别讨论
- oracle length&vsize
- 关于oracle length()函数的问题 笔记
- 关于java和.net的一些感想
- 关于易经和决定的一些感想
- 关于Oracle的一些函数
- VSIZE(X)函数
- 关于博客的一些感想
- 关于研发的一些感想
- 一些关于工作的感想
- 关于2012的一些感想
- 关于android的一些感想
- 关于培训的一些感想
- 关于目标的一些感想
- 关于找工作的一些感想
- 关于测试的一些感想
- 关于工作的一些感想
- opengl 教程(2) 在窗口画点
- linux下hadoop-1.0.4源码部署及编译
- ios屏幕兼容 phone4和iphone5的屏幕尺寸不同,在程序中兼容
- Sizing and Tuning GPFS
- 字符串距离-相似度
- oracle关于length和vsize函数的一些感想
- opengl 教程(3) 在窗口画三角形
- UDP实现可靠数据传输
- Cocos2d-x 3.0 开发(七)在程序中处理cocoStudio导出动画
- Ubantu 12 联想ATI双显卡机器 换驱动后进不去了 解决方法
- MFC中的sprintf怎么输出换行回车啊?用\n不管用吗?
- opengl 教程(6) 平移变换
- jsp page指令详解
- 网络第一课(5)