日期:2014-05-17  浏览次数:20981 次

求助 oracle VARCHAR2 字段查询数字的写法
ORACLE数据库,表中有个VARCHAR2类型的字段,存储的结构有数字,也有字符,我想查询数字中<5 的记录怎么写 ,一开始用我写了一个数字判断的函数用于过滤字段中的字符结果 但是加上运算符和数字执行就爆无效数字 请高手帮忙 谢谢

------解决方案--------------------

WITH tab AS(
SELECT '1' num FROM dual UNION ALL
SELECT '3' num FROM dual UNION ALL
SELECT '6' num FROM dual UNION ALL
SELECT 'a' num FROM dual UNION ALL
SELECT 'bc' num FROM dual UNION ALL
SELECT 'd' num FROM dual 
)
SELECT * FROM (
    SELECT * FROM tab WHERE regexp_like(num,'[[:digit:]]')
)
WHERE num<5

结果:
      NUM
    -------
      1
      

------解决方案--------------------
我觉得二楼的还是有问题的,他的正则表达式只过滤了纯字母,比如要是‘12ac’这样的是过滤不成功的,楼主可以用这样的思路:把varchar2的字段全提出来,用to_number处理,如果能变成number的话就取出来,不能的话会报异常,楼主可以捕捉下异常就行。如果你按这个思路不行的话,我可以帮你写出来
------解决方案--------------------
引用:
ORACLE数据库,表中有个VARCHAR2类型的字段,存储的结构有数字,也有字符,我想查询数字中<5 的记录怎么写 ,一开始用我写了一个数字判断的函数用于过滤字段中的字符结果 但是加上运算符和数字执行就爆无效数字 请高手帮忙 谢谢


你的记录是
id
asd1
1

select * from tb where translate(col,'asd',' ')+0<5

select * from tb regexp_replace(col,'[[:alpha:]]','')<5

还是
1
abc
select * from tb where  regexp_like(col,'[[:digit:]]')
------解决方案--------------------
引用:
引用:
SQL code

WITH tab AS(
SELECT '1' num FROM dual UNION ALL
SELECT '3' num FROM dual UNION ALL
SELECT '6' num FROM dual UNION ALL
SELECT 'a' num FROM dual UNION ALL
SELECT 'b……


哪里嘛,晓得点皮毛而已,最近在学习正则表达式,我收藏了几篇网摘,minitoy空间转的,你可以看下,觉得还是很不错的。