SQL Server — Как проверить, является ли строка текстовой или любым представлением 0?

#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