#sql #sql-server
#sql #sql-server
Вопрос:
У меня есть «нечистый» столбец Col1 типа nvarchar(20), содержащий числа (как целые, так и десятичные) и различные представления текста «Нет данных» (например, no-data, нет данных, НЕТ ДАННЫХ и т.д.) Для случаев, когда значение не может быть найдено.
Я ищу запрос, который будет извлекать мне только записи, содержащие КАКОЕ-ЛИБО представление 0 (например, 0, 00, 0.00 и т.д.) Или точный текст «НЕТ ДАННЫХ».
Я не могу найти способы использования регулярных выражений в SQL Server 2016.
Комментарии:
1. Вы могли бы проверить значения, используя ISNUMERIC
Ответ №1:
Это должно быть довольно просто:
select (case when try_convert(float, col) = 0 then 1 else 0 end) as IsZero
try_convert()
возвращает NULL
, если преобразование не работает.
В общем случае сравнение чисел с плавающей запятой с константами не рекомендуется. В этом случае я почти уверен, что все разумные представления нуля были бы точными.
Если это вызывает беспокойство, вы могли бы сделать:
select (case when try_convert(int, replace(col, '.', '')) = 0 then 1 else 0 end) as IsZero
Конечно, это позволило бы 0.0.0
.
Комментарии:
1. Незначительное изменение синтаксиса —
select (case when try_convert(float, col) = 0 then 1 else 0 end) as IsZero