代码之家  ›  专栏  ›  技术社区  ›  Ivo

获取包含数字的所有记录

  •  3
  • Ivo  · 技术社区  · 15 年前

    可以编写一个查询,从某个字段包含数值的表中获取所有记录?

    类似于“从tbladdress中选择街道,其中街道类似于“%0%”,或街道类似于“%1%”等

    只有一个函数?

    5 回复  |  直到 11 年前
        1
  •  13
  •   priyanka.sarkar    15 年前

    试试这个

    declare @t table(street varchar(50))
    insert into @t 
        select 'this address is 45/5, Some Road' union all
        select 'this address is only text'
    
    select street from @t
    where street like '%[0-9]%'
    

    街道

    this address is 45/5, Some Road
    
        2
  •  6
  •   martin clayton egrunin    15 年前

    是的,但是它将是低效的,并且可能很慢,在模式的前沿有一个通配符

    LIKE '%[0-9]%'
    
        3
  •  1
  •   paxdiablo    15 年前

    在列中搜索文本的效率非常低,而且不能很好地伸缩(通常,每行函数都有这个问题)。

    你应该做的是用磁盘空间(便宜)换取性能(便宜) 从未 通过创建新的列, hasNumerics 例如,向其添加索引,然后使用插入/更新触发器根据进入实列的数据对其进行设置。

    这意味着计算完成了 只有 当创建或修改行时,不是 每一次 你提取数据。数据库几乎 总是 阅读的次数远多于编写的次数,使用此解决方案可以将计算成本分摊到许多 select 语句执行。

    然后,当需要数据时,只需使用:

    select * from mytable where hasNumerics = 1; -- or true or ...
    

    并观察它离开正则表达式查询或 like '%...%' 尘土中的怪物。

        4
  •  1
  •   Bohemian    11 年前

    若要提取只包含数字的行,请使用此查询

    select street 
    from tbladdress 
    where upper(street) = lower(street)
    

    在Oracle中工作。

        5
  •  0
  •   Ivo    15 年前

    我找到了这个解决方案“从tbladrese中选择街道(nolock),其中patindex('%[0-9]%,street)=1”

    我花了2分钟在一块未编制索引的土地上搜索了300万块土地。