====一个关于数字的比较难的查询语句,高手请进======

starry11 2005-11-08 10:05:45
假设数据库的数据如下:

NO
12
2A
30B
5E
8D

现在希望能够获取5到12的号码,那么5E,8D,12都符合要求,NO的字段类型是VChar,怎么写查询语句才能够查到正确的NO呢?

如果当字符串那样比较是肯定不行的,不知道有什么好办法?请各位高手指点,谢谢

...全文
109 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwind5 2005-11-08
  • 打赏
  • 举报
回复
SELECT * FROM TABLE_NAME
WHERE TO_NUMBER(TRANSLATE(UPPER(substr(no, 1, decode(instr(no, '-'), 0, length(no), instr(no, '-')-1))),'1ABCDEFGHIJKLMNOPQRSTUVWXYZ','1')) >=5 AND
TO_NUMBER(TRANSLATE(UPPER(substr(no, 1, decode(instr(no, '-'), 0, length(no), instr(no, '-')-1))),'1ABCDEFGHIJKLMNOPQRSTUVWXYZ','1'))<=12

用 substr(no, 1, decode(instr(no, '-'), 0, length(no), instr(no, '-')-1)) 替换 NO
starry11 2005-11-08
  • 打赏
  • 举报
回复
补充一下,NO还有可能取值为 5-30B 之类的包含“-"的,就是想要截取出“-"之前的值来进行比较,如果没有"-"而有字母的,就要把字母前面的截取出来作比较

这个查询语句应该怎么写?
qiaozhiwei 2005-11-08
  • 打赏
  • 举报
回复
SELECT * FROM TABLE_NAME
WHERE TO_NUMBER(TRANSLATE(UPPER(NO),'1ABCDEFGHIJKLMNOPQRSTUVWXYZ','1')) >=5 AND
TO_NUMBER(TRANSLATE(UPPER(NO),'1ABCDEFGHIJKLMNOPQRSTUVWXYZ','1'))<=12

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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