Как проверить, что столбец содержит значения, отличные от чисел

#sql #sql-server #null #sql-like

#sql #sql-сервер #null #sql-подобный

Вопрос:

Я хочу проверить, содержит ли столбец значения, отличные от чисел. Я ожидаю, что этот запрос также выведет значения NULL, но это не так. Я знаю, что столбец содержит нулевые значения. Как я могу изменить этот запрос, чтобы также получать нулевые значения в качестве выходных данных? Заранее благодарю вас!

 SELECT DISTINCT [1001account], [5028account], Balancesheettype
FROM [Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE (StresstestaccountEnabled LIKE '%Yes%' AND BalancesheetAmount <> 0) AND (
    [1001account] NOT LIKE '%[0-9]%' OR
    [5028account] NOT LIKE '%[0-9]%'
)
 

Комментарии:

1. Пожалуйста, предоставьте структуру таблицы и пример входных / выходных данных.

Ответ №1:

x NOT LIKE '%[0-9]%' не будет соответствовать ABC123 (который содержит значение, отличное от чисел). В SQL Server вы могли бы использовать could use LIKE with [^...] ; и вам нужно проверять наличие нулей отдельно:

 WHERE column1 LIKE '%[^0-9]%' OR column1 IS NULL
 

Ответ №2:

Если у вас SQL Server 2012 , вы можете использовать TRY_PARSE .

Чтобы вернуть записи, которые не являются допустимыми числами (включая NULL ), сделайте что-то вроде WHERE TRY_PARSE(val AS INT) IS NULL . Конечно, производительность, скорее всего, пострадает, но и практически любое другое решение.

Ответ №3:

 where ISNULL(column,'1') LIKE '%[0-9]%'
 

Ответ №4:

Используйте оператор mysql ifnull: https://mariadb.com/kb/en/library/ifnull /

    SELECT DISTINCT
    [1001account], [5028account], Balancesheettype
    FROM 
    XXX
    WHERE
    (StresstestaccountEnabled LIKE '%Yes%' AND BalancesheetAmount <> 0)
    AND
    (
    IFNULL([1001account],0) NOT  LIKE '%[0-9]%'
    OR
    IFNULL([5028account],0) NOT LIKE '%[0-9]%'
    )