Как проверить столбец содержит значения, отличные от цифр - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу проверить, содержит ли столбец значения, отличные от цифр.Я ожидаю, что этот запрос также выведет значения NULL, но это не так.Я знаю, что столбец содержит значения NULL.Как я могу изменить этот запрос, чтобы получить значения 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]%'
)

Ответы [ 4 ]

2 голосов
/ 18 апреля 2019

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

WHERE column1 LIKE '%[^0-9]%' OR column1 IS NULL
0 голосов
/ 18 апреля 2019
where ISNULL(column,'1') LIKE '%[0-9]%'
0 голосов
/ 18 апреля 2019

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

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

0 голосов
/ 18 апреля 2019

Используйте оператор 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]%'
    )
...