Получить все записи, содержащие номер - PullRequest
3 голосов
/ 27 ноября 2009

Можно написать запрос, получить всю эту запись из таблицы, в которой определенное поле содержит числовое значение?

что-то вроде «выберите улицу из tbladdress, где улица как«% 0% »или улица как«% 1% »и т. Д."

только тогда с одной функцией?

Ответы [ 5 ]

13 голосов
/ 27 ноября 2009

Попробуйте это

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
6 голосов
/ 27 ноября 2009

Да, но это будет неэффективно и, вероятно, медленно, с подстановочным знаком на переднем крае шаблона

LIKE '%[0-9]%'
1 голос
/ 19 февраля 2013

Чтобы получить строки, содержащие только цифры, используйте этот запрос

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

Работает в оракуле.

1 голос
/ 27 ноября 2009

Поиск текста в столбце ужасно неэффективен и плохо масштабируется (у каждой функции, как правило, есть проблема).

То, что вы должны сделать, это обменять дисковое пространство (которое дешево) для производительности (которая никогда дешево), создав новый столбец, например hasNumerics, добавив к нему индекс, затем используя триггер вставки / обновления, чтобы установить его на основе данных, поступающих в реальный столбец.

Это означает, что вычисление выполняется только при создании или изменении строки, а не каждый раз, когда вы извлекаете данные. Базы данных почти всегда читаются гораздо чаще, чем пишутся, и использование этого решения позволяет амортизировать стоимость вычислений для многих select выполнений операторов.

Тогда, когда вам нужны ваши данные, просто используйте:

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

и наблюдайте, как он оставляет запрос регулярного выражения или like '%...%' чудовище в своей пыли.

0 голосов
/ 27 ноября 2009

Я нашел это решение "выберите улицу из Табладресса с помощью (nolock), где patindex ('% [0-9]%', улица) = 1"

Мне потребовалось 2 минуты, чтобы найти 3 миллиона в неиндексированном поле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...