В discount_text скидка хранится как текст, но иногда значение отсутствует и записано как '' или ' '. Вы хотите получить discount_int, где пропуски становятся NULL, и не ловить ошибку каста. Какое выражение лучше всего подходит?

ACAST(discount_text AS int)
BTRIM(discount_text)::int
CCAST(NULLIF(TRIM(discount_text), '') AS int)
DLOWER(discount_text)::int
Правильный ответ. Паттерн CAST(NULLIF(TRIM(x), '') AS int) часто используют для устойчивого каста текста в число.

Разбор

Пустые строки и строки из пробелов — частый «заменитель NULL» в сырых данных. TRIM убирает пробелы по краям, NULLIF(..., '') превращает пустую строку в NULL, а затем каст уже безопаснее. Это снижает количество падений запросов при агрегациях и витринах.

Проверь себя · 1/3разбор после ответа
В таблице customers поле lifetime_value_text хранится как текст. Вы делаете топ клиентов по выручке, но сортировка выглядит неверно (например, 100 идёт раньше 20). Как исправить ORDER BY?
Тренировать SQL в Telegram

Ещё вопросы по теме «Строки и приведение типов»