MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1954|回复: 4
打印 上一主题 下一主题

MySQL查询

[复制链接]
跳转到指定楼层
1#
发表于 2012-12-26 14:41:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠:
   小弟有问题请教。请问为什么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




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
2#
 楼主| 发表于 2012-12-26 14:46:17 | 只看该作者
先谢谢各位了。
3#
 楼主| 发表于 2012-12-27 11:19:44 | 只看该作者
尼玛的,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用的不到家,

点评

这样的写法也是可以的:CASE field WHEN '男' THEN 'Mr.' WHEN '女' THEN 'Ms.' ELSE 'Mrs.' END  发表于 2012-12-27 18:13
才看到,有总结是个好习惯。  发表于 2012-12-27 18:08
4#
 楼主| 发表于 2012-12-29 09:35:46 | 只看该作者
谢谢 case filed when 这样用判断数字会出错。字符还没试,试了再回帖。
5#
 楼主| 发表于 2013-1-5 16:10:58 | 只看该作者
末猪 发表于 2012-12-27 11:19
尼玛的,case后面跟个列名居然不报错,SQL Server里面就报错。加上列名后就统计结果就不对了。我那个插。
...

kider 哥,在case后面加要判断的列,在字符和数字方面都会判断出错。不能发图,很悲剧。各位自己搞了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-25 08:28 , Processed in 0.085041 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表