Занятие 12. Summary session 3
⚡ Кратко: суть темы
Повторяем темы занятий 9–11: типы данных, преобразование типов через CAST, скрытые преобразования в MySQL, типы даты/времени и основные функции для работы с датами.
- Числовые, строковые, булевы и временные типы данных.
- Явное преобразование —
CAST(expression AS type). - Скрытые преобразования в MySQL: строки ↔ числа.
DATE,TIME,DATETIME,TIMESTAMP,YEARи функцииNOW,DATE_ADD,DATEDIFF,DATE_FORMAT.
Что запомнить: правильный тип данных и явное преобразование делают запросы предсказуемыми и переносимыми.
Частая ошибка: полагаться на неявные преобразования при переносе запросов между СУБД.
📖 Типы данных
Каждому столбцу в таблице назначается тип данных. Он определяет:
- какие значения можно хранить;
- сколько места занимают данные;
- какие операции доступны.
| Категория | Типы | Примеры использования |
|---|---|---|
| Числовые | INT, DECIMAL, FLOAT | Количество, цена, расчёты |
| Строковые | CHAR, VARCHAR, TEXT | Имена, адреса, описания |
| Булевы | BOOLEAN / TINYINT(1) | Флаги активности, роли |
| Дата и время | DATE, TIME, DATETIME, TIMESTAMP, YEAR | Даты заказов, логи, события |
📖 Явное преобразование: CAST
Функция CAST преобразует выражение в указанный тип данных. В MySQL часто используются:
SIGNED/UNSIGNED— целые числа.DECIMAL— точные числа.CHAR— строки (в MySQL вместоVARCHAR).DATE,TIME,DATETIME— дата и время.
SELECT CAST('123' AS SIGNED) AS number;
SELECT CAST(id AS CHAR(10)) AS id_string FROM customers;
SELECT CAST('2024-08-25' AS DATE) AS converted_date;
📖 Скрытые преобразования в MySQL
MySQL часто преобразует типы автоматически:
- Строка с числом → число при арифметике.
- Число → строка при конкатенации.
- Строка → число при сравнении со числом.
SELECT '100' + 50 AS arithmetic_result; -- 150
SELECT CONCAT('Total: ', 150) AS msg; -- 'Total: 150'
SELECT * FROM products WHERE unit_in_stock = '50';
Проверить по документации: скрытые преобразования зависят от СУБД и версии. Для переносимых запросов используйте CAST.
📖 Дата и время
Основные типы:
DATE— только дата.TIME— только время.DATETIME— дата и время.TIMESTAMP— момент времени с учётом часового пояса.YEAR— только год.
Частые функции:
NOW(),CURDATE(),CURTIME()— текущий момент.DATE_FORMAT(date, format)— форматирование.DATEDIFF(date1, date2)— разница в днях.DATE_ADD(date, INTERVAL n unit),DATE_SUB(...)— сдвиг даты.YEAR(date),MONTH(date),DAY(date),EXTRACT(...)— части даты.
📖 Различия MySQL и PostgreSQL
| Операция | MySQL | PostgreSQL |
|---|---|---|
| Текущая дата/время | NOW() | NOW(), CURRENT_TIMESTAMP |
| Текущая дата | CURDATE() | CURRENT_DATE |
| Разница в днях | DATEDIFF(d1, d2) | DATE_PART('day', d1 - d2) |
| Добавить интервал | DATE_ADD(d, INTERVAL 7 DAY) | d + INTERVAL '7 days' |
| Извлечь год | YEAR(d) | EXTRACT(YEAR FROM d) |
✨ Итоги блока
- Выбирайте тип данных под задачу: деньги —
DECIMAL, даты —DATE/DATETIME. - Явно приводите типы через
CAST, чтобы избежать сюрпризов. - Не полагайтесь на скрытые преобразования при работе с несколькими СУБД.
- Для дат используйте специальные функции, а не строковые манипуляции.