DB2:字符串大小比较问题

huoniao1976 2008-07-08 05:56:34
tab_pdwpud表中JDPAY字段类型是char(2)的,保存的数据为'0'~'99'和'nB'(0<n<10)
其中不同的数据段有不同的意义
1、0~79、nB,代表【热销商品】
2、80~89,代表【正常销售商品】
3、90~99,代表【滞销商品】

现要求查找所有jdpay在0~79的数据,sql如下

SELECT D.* FROM tab_pdwpud AS D WHERE '0' <= D.JDPAY AND D.JDPAY <= '79'

但是jdpay='8'的数据查不出来,如何修改这个sql语句?

...全文
1400 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyyrw 2008-07-18
  • 打赏
  • 举报
回复
可以加上字符串的长度进行比较,可以这么写:

SELECT D.* FROM tab_pdwpud AS D WHERE '0' <= D.JDPAY AND (D.JDPAY <= '79' or len(D.JDPAY)<2)
yangxiao_jiang 2008-07-15
  • 打赏
  • 举报
回复
select * from (
SELECT D.*,cast(D.JDPAY as Integer) as r FROM tab_pdwpud AS D WHERE JDPAY <>'_B'
) as temp where r>0 and r<79

你先把nB的过滤出去不就行了。
huoniao1976 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yangxiao_jiang 的回复:]
先转成int型的,在比较,否则8比79大。
[/Quote]

[Quote=引用 2 楼 sanyou98 的回复:]
使用cast()函数把char转换为integer后再查询就可以了
SELECT D.* FROM tab_pdwpud AS D WHERE 0 <= cast(D.JDPAY as integer) AND cast(D.JDPAY as integer) <= 79
[/Quote]

两位,对于记录为nB的数据进行Integer转换,不出错吗?
sanyou98 2008-07-09
  • 打赏
  • 举报
回复
使用cast()函数把char转换为integer后再查询就可以了
SELECT D.* FROM tab_pdwpud AS D WHERE 0 <= cast(D.JDPAY as integer) AND cast(D.JDPAY as integer) <= 79
yangxiao_jiang 2008-07-09
  • 打赏
  • 举报
回复
先转成int型的,在比较,否则8比79大。

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧