可以编写一个查询从某个表中获取所有该记录,其中某个字段包含一个数值吗?
类似于“从街道选择街道,其中街道像'%0%'或街道像'%1%'等等”
只有一个功能?
答案 0 :(得分:13)
试试这个
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
答案 1 :(得分:6)
是的,但是在模式的前沿有一个通配符,效率很低,而且可能很慢
LIKE '%[0-9]%'
答案 2 :(得分:1)
在列中搜索文本非常低效,并且不能很好地扩展(每行功能,通常都有这个问题)。
你应该做的是通过创建一个新列hasNumerics
来交换磁盘空间(这是便宜的)以获得性能(从不便宜),添加索引到然后使用插入/更新触发器根据进入实际列的数据进行设置。
这意味着在创建或修改行时计算仅 ,而不是每次 提取数据。数据库几乎始终读取的次数远远超过它们的编写时间,使用此解决方案可以分摊许多select
语句执行的计算成本。
然后,当您需要数据时,只需使用:
select * from mytable where hasNumerics = 1; -- or true or ...
并观看它会留下正则表达式查询或like '%...%'
怪物。
答案 3 :(得分:1)
要获取仅包含数字的行,请使用此查询
select street
from tbladdress
where upper(street) = lower(street)
在oracle中工作。
答案 4 :(得分:0)
我发现这个解决方案“选择街道从tbladresse与(nolock)patindex('%[0-9]%',街道)= 1”
我花了2分钟在一个没有索引的字段上搜索300万