В amount_text суммы записаны как текст, но иногда встречается пустая строка ''. Запрос SUM(CAST(amount_text AS int)) падает. Какое выражение чаще всего решает проблему, превращая пустые строки в NULL перед кастом?
A
SUM(amount_text)B
SUM(CAST(NULLIF(TRIM(amount_text), '') AS int))C
SUM(TRIM(amount_text))D
SUM(LOWER(amount_text))Правильный ответ. Перед кастом удобно превращать пустые строки в
NULL через NULLIF и убирать пробелы через TRIM.Разбор
Каст CAST('' AS int) обычно приводит к ошибке. Частый паттерн для аналитики — сначала очистить значение TRIM(...), затем заменить пустую строку на NULL через NULLIF(..., ''), и только потом приводить тип. Так агрегации вроде SUM(...) становятся устойчивее к «грязным» данным.
Проверь себя · 1/3разбор после ответа
В таблице
events поле event_date_text хранит дату как текст в формате YYYY-MM-DD. Вы хотите считать метрики по неделям и использовать функции дат. Что логичнее сделать в запросе?Ещё вопросы по теме «Строки и приведение типов»
- У вас есть таблицы `users(email)` и `marketing_signups(email)`. В одной системе email сохраняется как `Ivan@Example.com`, в другой — `ivan@example.com`. Какой подход в `JOIN` чаще всего решает проблему без изменения данных в таблицах?
- В таблице `products` категория хранится как `Books`, `books`, `BOOKS`. Вы хотите отфильтровать все варианты категории «books» в одном запросе. Какое условие в `WHERE` наиболее надежно?
- В отчёте по городам вы делаете агрегацию по `city`, но видите две строки: `Moscow` и `Moscow ` (с пробелом в конце). Как исправить это прямо в запросе?
- Поле `price_text` хранит цены как текст, например `2`, `10`, `100`. Аналитик написал фильтр `WHERE price_text > '10'` и получил странные результаты. Что нужно поменять, если сравнение должно быть числовым?
- В таблице `customers` поле `lifetime_value_text` хранится как текст. Вы делаете топ клиентов по выручке, но сортировка выглядит неверно (например, `100` идёт раньше `20`). Как исправить `ORDER BY`?
- Все вопросы по «Строки и приведение типов» →