Как говорится в заголовке, я пытаюсь преобразовать STRING в INT, но мне нужно значение NULL, когда строка недействительна.
Я уже пробовал с CAST и CONVERT
SELECT CONVERT("TEST", INT) FROM DUAL
SELECT CAST("TEST" AS INT) FROM DUAL
но обе функции возвращают 0 для недопустимого значения.
Есть короткий способ сделать это?
Вы можете проверить, выглядит ли значение как допустимое целое число:
select (case when col regexp '^[0-9]{1,10}$'
then cast(col as unsigned)
end)
Или вы можете просто использовать неявное преобразование:
select nullif (col + 0, 0)
Однако это преобразует нули в NULL
.