2009-11-27 3 views
3

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

что-то вроде «выберите улицу из tbladdress где улица как„% 0%“или улице, как„% 1%“ЭСТ ЭСТ»

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

ответ

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 
+0

Я буду использовать это, спасибо за ответ – Ivo

6

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

LIKE '%[0-9]%' 
0

Я нашел это решение "select street from tbladresse wit ч (NOLOCK) где PATINDEX ('% [0-9]%', улица) = 1"

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

без индекса
+1

Но это не сработает для случаев, которые я произвел, например. 'этот адрес - 45/5, Some Road' –

+0

@pewned: true, но все, что он должен сделать, это изменить = 1 на> 0. Мне нравится ваше решение. –

+0

Для справки, ни один индекс в мире не поможет вам в этом вопросе. – erikkallen

1

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

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

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

Затем, когда вы хотите, чтобы ваши данные, просто используйте:

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

и смотреть его оставить регулярный запрос экспрессии или like '%...%' уродство в своей пыли.

+0

Мы используем запросы для экспорта строк, а затем помещаем их обратно с «улицей» и номером номера в отдельной колонке, но спасибо за советы – Ivo

+0

Если это не разовый поиск, да, это вероятно, хорошая идея. Но, конечно, вы должны использовать постоянный вычисленный столбец, а не триггер. – erikkallen

+0

Не все СУБД имеют рассчитанные столбцы, и я полагаю, что у IBM действительно есть патент на эту функцию. – paxdiablo

0

Для выборки строк, которые содержат только цифры, использовать этот запрос

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

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