MariaDB社区

标题: MySQL查询 [打印本页]

作者: 末猪    时间: 2012-12-26 14:41
标题: MySQL查询
各位大侠:
   小弟有问题请教。请问为什么MySQL 的CASE判断会出错?
   需求:我想用lie8(请移驾原始数据部分)乘以100,取小数点前面的数字并转换为INTEGER,再用CASE语句判断数值范围,
             >=10为1,<10 and >=8 为2,其他为3。
   问题:但当lie8的值为0时,CASE出来的结果1,应该为3才对。所有请教各位。

原始数据:
阿坝 0.9
德阳 0.0338
甘孜 0
雅安 0
资阳 0
......
自贡 0.0224
全省 0.0192

错误的输出结果(除阿坝为1外,其余为3才对):
阿坝 3
德阳 3
甘孜 1
雅安 1
资阳 1
........
自贡 3
全省 3

查询语句:
select city as 'city', case substring_index(lie8*100,'.',1)
  when cast(substring_index(lie8*100,'.',1) as UNSIGNED INTEGER) >= 10 then 1
  when cast(substring_index(lie8*100,'.',1)  as UNSIGNED INTEGER)< 10
    and cast(substring_index(lie8*100,'.',1) as UNSIGNED INTEGER) > 8 then 2
  else 3
END as 'qujian'
from jh_securities;

其他信息:
该列数据类型:Float  length 5
character_set_client:gbk
character_set_connection:gbk
character_set_database:gbk
character_set_server:utf8
character_set_system:utf8





作者: 末猪    时间: 2012-12-26 14:46
先谢谢各位了。

作者: 末猪    时间: 2012-12-27 11:19
尼玛的,case后面跟个列名居然不报错,SQL Server里面就报错。加上列名后就统计结果就不对了。我那个插。
正确的SQL是:
select
  city,
  case
     when lie8 >= 0.1 then 1
     when lie8 < 0.1 and lie8 >= 0.08 then 2
     else 3
     end
from
   jh_securities;
看来case when用的不到家,

作者: 末猪    时间: 2012-12-29 09:35
谢谢 case filed when 这样用判断数字会出错。字符还没试,试了再回帖。
作者: 末猪    时间: 2013-1-5 16:10
末猪 发表于 2012-12-27 11:19
尼玛的,case后面跟个列名居然不报错,SQL Server里面就报错。加上列名后就统计结果就不对了。我那个插。
...

kider 哥,在case后面加要判断的列,在字符和数字方面都会判断出错。不能发图,很悲剧。各位自己搞了。
作者: 吃醋心疼i    时间: 2016-1-27 12:15
北京最好的癫痫病医院 http://haoyy.yuqinge.com/dxyy/
北京最好的癫痫病医院 http://jiankang.zkxww.com/
北京最好的癫痫病医院 http://health.lzbs.com.cn/yiyuan/
北京治疗癫痫病的医院 http://haoyy.yuqinge.com/lzyy/
北京治疗癫痫病的医院 http://jiankang.zkxww.com/
北京治疗癫痫病的医院 http://jkbk.thmz.com/bjdxbyy/9689275443.html
北京治疗癫痫病的医院 http://health.lzbs.com.cn/dianxian/
北京市最好的癫痫医院 http://jiankang.zkxww.com/
北京癫痫病医院排名榜 http://health.lzbs.com.cn/dianxian/
北京癫痫病医院排名榜 http://jiankang.zkxww.com/





欢迎光临 MariaDB社区 (http://123.56.88.72/) Powered by Discuz! X3.2