Как определить, содержит ли поле varchar в SQL любые числовые символы?
Я работаю над проектом, где нам нужно выяснить, является ли данное поле потенциально именем компании в сравнении с адресом.
При очень широком проглатывании в нем мы исходим из предположения, что если это поле не содержит чисел, вероятность того, что это имя или адрес улицы (мы стремимся к 80% -му делу, зная, что некоторые необходимо будет сделать вручную).
Итак, теперь к вопросу. Учитывая таблицу, для простоты, одного столбца varchar (100), как я могу найти те записи, у которых нет числовых символов в любой позиции в поле?
Например:
"Main Street, Suite 10A" --Do not return this.
"A++ Billing" --Should be returned
"XYZ Corporation" --Should be returned
"100 First Ave, Apt 20" --Should not be returned
Спасибо заранее!
Ответы
Ответ 1
Sql Server позволяет использовать синтаксис типа regex для диапазона [0-9]
или Set [0123456789]
для оператора LIKE
, который можно использовать с любым строковым шаблоном (%
). Например:
select * from Address where StreetAddress not like '%[0-9]%';
Подстановочный знак %
в начале LIKE
, очевидно, повредит производительность (возможно, сканирование), но в вашем случае это кажется неизбежным.
Еще одна ссылка MSDN.
Ответ 2
select * from table where column not like '%[0-9]%'
Этот запрос возвращает все строки из таблицы, где столбец не содержит цифр от 0 до 9.
Ответ 3
Мне нравится простой подход с регулярным выражением, но для обсуждения упомянет эту альтернативу, которая использует PATINDEX.
SELECT InvoiceNumber from Invoices WHERE PATINDEX('%[0-9]%', InvoiceNumber) = 0
Ответ 4
Этот запрос, чтобы отобразить таблицы, созданные с числовыми символами
select * from SYSOBJECTS where xtype='u' and name like '%[0-9]%'
Ответ 5
Это сработало для меня.
select total_employee_count from company_table where total_employee_count like '%[^0-9]%'
Это возвращает все строки, содержащие не числовые значения, включая 2-3.