case when缺失关键字和字符集不匹配
2015-12-25 15:40
567 查看
</pre><pre name="code" class="sql">
字符集不匹配问题:
<span style="font-family: SimSun; font-size: 14px; background-color: rgb(255, 255, 255);"></span><pre name="code" class="sql">select case 洗井原因 when '分注井测试前洗井' then '1' when '长关井开井前洗井' then '2' when '吸水能力下降洗井' then '4' else '99' end 洗井原因 from wash_v_pro2 t
代码报错
![](http://img.my.csdn.net/uploads/201212/28/1356665011_3787.png)
研究发现t.洗井原因是nvarchar2类型的,when的条件''中的汉字是varchar2类型的,所以要把''中的汉字都转化为nvarchar2类型
根据该文得知
oracle中nvarchar2字符集不匹配
应该用to_char函数来进行varchar2与 nvarchar2的类型转换
case的用法中when与else后的字符类型必须一致,但是这样还是不行,再把case后的字符类型改成与when、else后的字符类型一致才算ok
select case to_char(洗井原因) when to_char('分注井测试前洗井') then '1' when to_char('长关井开井前洗井') then '2' when to_char('吸水能力下降洗井') then '4' else '99' end 洗井原因 from wash_v_pro2 t这样就能取到了
然而后来我又注意到
case when 洗井原因 = '分注井测试前洗井' then '1' when 洗井原因 = '长关井开井前洗井' then '2' when 洗井原因 = '吸水能力下降洗井' then '4' else '99' end 洗井原因
这样不用改类型也能取,不得其解,只能暂时知道待判断列在case后时需要字符集匹配,集体使用to_char,而在when后单独判断时不需要字符集匹配。
缺失关键字:
select case 洗井状态 when substr(洗井状态,0,5) = '洗井未完成' then '2' when '洗井正常完成' then '1' else '' end 洗井状态 from wash_v_pro2 t语句
when substr(洗井状态,0,5) = '洗井未完成' then '2'报错:
后来发现是因为case后已经接了待判断列,when后面不能再接判断语句,
比如:
when substr(洗井状态,0,5) = '洗井未完成'
改为
when 1=1
同样报错。
改为
when '字符串'
就不报错了,证明when后面不能再加判断语句了。
于是最终代码改为
</pre><p></p><pre name="code" class="sql"><pre name="code" class="sql">select case
<span style="white-space:pre"> </span>when substr(洗井状态,0,5) = '洗井未完成'
<span style="white-space:pre"> </span> then '2' <span style="white-space:pre"> </span>when 洗井状态 = '洗井正常完成'
<span style="white-space:pre"> </span> then '1' <span style="white-space:pre"> </span>else '' <span style="white-space:pre"> </span>end 洗井状态 from wash_v_pro2 t
case后面不再接待判断列,所有判断都写在when后面,不再报错了
总结:case when else end最好把判断条件写在when后面,不报错,就是累点,复制粘贴比较多
case后面接带判断列,when后面接字符可以方便的直接进行匹配判断,但是1.可能遇到字符不匹配2.不能在when后面再加条件进行判断
相关文章推荐
- leetcode Create Maximum Number
- Android线程中断
- 如何用C语言画一个“圣诞树”
- Android开发总结笔记 Drawable (中) 3-2
- Linux 下 Qt Creator 的安装,并使用它开发你的第一个 Qt 项目全过程
- Lua 调用自定义C模块(练习)
- iOS多线程NSOperation
- RxJava与RxAndroid 被观察者的创建
- assets里的zip压缩文件并解压到指定路径下保存
- JDK5个小工具
- 常用utils android
- 详解Mysql case then使用
- 【Java】HTTP Web调试工具Fiddler介绍和使用教程
- lua遍历调用C#泛型List、IEnumberable、Dictionary
- 创建虚拟机中的nova-scheduler 调度配置
- 数据结构课程设计——图书信息管理系统设计
- linux从命令行发送邮件
- action使用addFieldError显示提示信息
- OC内存管理
- 蓝牙后台接收数据(BLE4.0)