技术问题,sql查询语句相关……

  • 新生
    select语句,有没有办法返回某个字段的数据是只由数字组成的记录。
    比如对于a字段,a=1 or 23 or 3451 or 9874这些都符合以上条件,而a=adb or $eer or +33这些就不对
    感觉应该是不难的问题,有就有没就没,懒得去技术论坛问了……
  • i
    iorilu
    看看有没有isnumber之类的函数
  • 孤云半月
    那我就来个史上最笨的SQL语句好了 'select * from aaa where bbb like '%1%' or bbb like '%2%'.......or bbb like '%0%' ':D
  • y
    yangzhicai
    一下子也想不出来怎么写
  • y
    yangzhicai
    这样不是都选出来了?
  • v
    voodoo
    select * from table where isnumeric(a)=1
  • i
    iorilu
    这有啥用,lz要得是只有数字的,你这个是包含数字的,lz用的啥数据库啊,不同数据库提供函数都不一样的
  • 孤云半月
    不好意思没看清题目
    试试这样的行不行 Select * from TableName Where 字段 Like '%[^0-9]%' 这句造SQLSERVER2000下可用

    6#的 至少在SYBASE下不可用...

    [本帖最后由 孤云半月 于 2007-12-11 17:11 编辑]
  • 新生
    sqlserver2005
  • 沉默の狙击手
    +1
  • 打击者
  • i
    iorilu
    居然是baidu
  • 7
    788414


    sql都忘记的差不多

    学了招,泄泻
  • 新生
    这个很神奇地把a字段为'+'的字段搜出来了……
  • 新生
    10分钟以内能google到的我基本不会问人。其实干这行得出的经验是,一边google一边上网问是最有效率的
  • l
    leonWong
    因为把+当成是正号了
    PS: sqlserver 玩的不多,内置函数不清楚,帮你去msdn看看

    [本帖最后由 leonWong 于 2007-12-11 18:57 编辑]
  • 比卡丘
    declare @t table(str varchar(50))

    insert into @t select 1
    insert into @t select '=12+'
    insert into @t select '12+'
    insert into @t select '+12'
    insert into @t select '12-'
    insert into @t select '-12'
    insert into @t select 2
    insert into @t select 3451
    insert into @t select '美好'
    insert into @t select 9874
    insert into @t select 'tgfc'

    select * from @t where isnumeric(str)=1 and str not like '%+%' and str not like '%-%'

    用LIKE效率有点低

    对于不是数字的字符(如加号 (+)、减号 (-))和有效货币符号(如美元符号 ($))字符,ISNUMERIC 将返回 1,含小数点也会返回1,不需要也like掉

    isnumeric对12+或12-这样的返回是0

    结果
  • 新生
    下班了,回家。
    先谢谢提供信息的各位,明天再看
  • 新生
    临走前看了一下,pikatyu提供的方案看来最为完善。
  • 7
    788414
    Sql sever 2005?

    等下装2005试下

    2000可以实现么?

    泄泻比卡丘
  • k
    kiler
    写一个IsNumber的function啦,也不是很难的,懒得写了。
  • z
    zxsoft
    我实际试了一下。isnumeric会把'%-'和'%+'过滤掉。比版的表不加and 后的东西显示
    str
    --------------------------------------------------
    1
    +12
    -12
    2
    3451
    9874

    所以加like限制的时候没有必要限制后面的加减号。直接用not like '-%' and not like '+%'即可。但是这样就没有必要用like了。于是优化成下面的代码。效率会高些吧?:D

    select * from @t where isnumeric(str)=1 and left(str,1)<>'+' and left(str,1)<>'-'[本帖最后由 zxsoft 于 2007-12-12 04:25 编辑]
  • k
    kiler
    其实你可以先滤掉'+','-'再isnumeric

    select * from @t where isnumeric(RePlace(RePlace(str,'+',''),'-',''))=1
  • i
    iorilu
    高那么麻烦,写个function了,对每个字符循环下判断不就完了
  • z
    zxsoft
    我怎么觉得没我写的效率高?