Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Составить like  [new]
*Ann*
Member

Откуда:
Сообщений: 94
Добрый день.
Помогите, пожалуйста, составить выражение для оператора like.
Надо выбрать номера домов больше 400. При этом поле текстовое и может содержать любое количество символов, например "453/1" или "1012 литер А".
27 мар 19, 06:46    [21844468]     Ответить | Цитировать Сообщить модератору
 Re: Составить like  [new]
iap
Member

Откуда: Москва
Сообщений: 46982
WHERE Number > '400'
27 мар 19, 10:17    [21844661]     Ответить | Цитировать Сообщить модератору
 Re: Составить like  [new]
court
Member

Откуда:
Сообщений: 2020
iap
WHERE Number > '400'
дык, для "1012 литер А" - "не сыграет" ...
select case when '1012 литер А' > '400' then 1 else 0 end 

(Отсутствует имя столбца)
0
27 мар 19, 11:05    [21844732]     Ответить | Цитировать Сообщить модератору
 Re: Составить like  [new]
L_argo
Member

Откуда:
Сообщений: 1217
Отделить первое число от нечисла (пробел, косая, буквы).
Преобразовать полученную подстроку в число
Сделать проверку на более 400
(профит)
27 мар 19, 11:15    [21844749]     Ответить | Цитировать Сообщить модератору
 Re: Составить like  [new]
iap
Member

Откуда: Москва
Сообщений: 46982
court
iap
WHERE Number > '400'

дык, для "1012 литер А" - "не сыграет" ...
select case when '1012 литер А' > '400' then 1 else 0 end 


(Отсутствует имя столбца)
0
select case when PATINDEX('%[^0123456789]%','1012 литер А') > LEN('400')+1 OR '1012 литер А' > '400' then 1 else 0 end
27 мар 19, 11:59    [21844830]     Ответить | Цитировать Сообщить модератору
 Re: Составить like  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7769
*Ann*,

задача не имеет решения в общем случае, можно только предполагать, что полученные символы являются номером дома.
Например, номер дома может быть 400А и 400Б или строка записана как "д. 30 49 крп.100".
27 мар 19, 12:18    [21844872]     Ответить | Цитировать Сообщить модератору
 Re: Составить like  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
Ищет в строке число (длиной от трех знаков) и преобразовает его в Int. Если не находит - NULL

try_cast(substring(HouseNum,
nullif(patindex('%[0-9][0-9][0-9]%',HouseNum),0),
isnull(nullif(patindex('%[^0-9]%',substring(HouseNum,nullif(patindex('%[0-9][0-9][0-9]%',HouseNum),0),len(HouseNum))),0)-1,len(HouseNum)))
as int)
27 мар 19, 13:01    [21844963]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить