#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]%'
)