Литералы
Что такое литералы: определение, основные принципы, примеры и практические советы. Изучайте SQL для тестировщиков с подробными объяснениями для начинающих специалистов.
Литералы.
Литерал — это указанное явным образом фиксированное значение, например, число 12 или строка “SQL”.
Основными типами литералов в MySQL являются:
- Строковые литералы.
- Числовые литералы.
- Литералы даты и времени.
- Логические литералы.
- NULL.
Строковые литералы.
Строка — это последовательность символов, заключенных в одинарные (’) или двойные (”) кавычки. Например, ‘это строка’ и «это строка».
Строки могут содержать специальные последовательности символов, начинающиеся с ”\” (экранирующий символ). Они нужны для того, чтобы СУБД придала обычным символам (буквам и другим знакам) новое особое значение. Например, последовательность “\n” буквально означает «перевод строки», а без предваряющего слеша это была бы обычная буква «n».
Пример.
SELECT "Строка \n Другая строка" AS String;
Числовые литералы.
Характеристика | Описание | Примеры |
---|---|---|
Типы чисел | Целые и дробные числа. Разделитель дроби — точка | 1, 2.9, 0.01 |
Части числа | Может иметь только целую, дробную часть или обе сразу | .2, 1.1, 10 |
Знак числа | Положительные и отрицательные (знак + необязателен) | +1, -10, -2.2 |
Экспоненциальная запись | Представление в экспоненциальном виде | 1e3 (=1000), 1e-3 (=0.001) |
Литералы даты и времени.
Тип | Формат и примеры | Описание |
---|---|---|
Дата | YYYY-MM-DD, YYYYMMDD Пример: ‘2020-01-01’ = 1 января 2020, 00:00:00 | Дата со временем, равным нулю |
Время | hh:mm:ss, hh:mm, hh, ss Пример: 12:11 = 12:11:00 | Только время без конкретной даты |
Дата и время | YYYY-MM-DD hh:mm:ss, YYYYMMDDhhmmss Пример: ‘20200101183030’ = 1 января 2020, 18:30:30 | Дата с конкретным временем |
Функции генерации дат.
Если необходимо получить временные данные из строки, которая не соответствует ни одному формату, который принимает функция CAST, то можно использовать встроенную функцию STR_TO_DATE, которая принимает произвольную строку, содержащую дату, и формат, описывающий её.
Более подробное описание функции STR_TO_DATE и её аргументов можно посмотреть в справочнике.
Для генерации же текущей даты или времени нет необходимости создавать строку для последующего её преобразования в дату, потому что есть встроенные функции для получения данных значений: CURDATE, CURTIME и NOW.
Функции извлечения временных данных.
Иногда необходимо получить не всю дату, а только её конкретную часть, например, месяц или год.
Для этого в SQL есть следующие функции:
Функции извлечения временных данных
Функция | Описание | Диапазон |
---|---|---|
YEAR | Возвращает год для указанной даты | 1000-9999 |
MONTH | Возвращает числовое значение месяца года | 1-12 |
DAY | Возвращает порядковый номер дня в месяце | 1-31 |
HOUR | Возвращает значение часа для времени | 0-23 |
MINUTE | Возвращает значение минут для времени | 0-59 |
Отличие DATETIME от TIMESTAMP.
Критерий | DATETIME | TIMESTAMP |
---|---|---|
Диапазон | от 1000-01-01 00:00:00 до 9999-12-31 23:59:59 | от 1970-01-01 00:00:00 до 2038-01-19 03:14:07 |
Часовой пояс | Не учитывается. Отображается в таком виде, в котором дата была установлена | Учитывается. При выборках отображается с учётом текущего часового пояса сервера БД |
Функции преобразования типов.
Но не все преобразования СУБД может сделать автоматически, и тогда необходимо делать явное преобразование типов. Для этого в MySQL есть две очень схожие функции CAST и CONVERT.
CAST(значение AS тип для конвертации); CONVERT(значение, тип для конвертации);
- CAST (12005.6 AS DECIMAL) — 12006.
- CONVERT (12005.4, DECIMAL) — 12005.
Функция CAST умеет конвертировать переданное значение в любой из следующих типов:
Тип | Описание | Формат |
---|---|---|
DATE | Конвертирует значение в DATE | ”YYYY-MM-DD” |
DATETIME | Конвертирует значение в DATETIME | ”YYYY-MM-DD hh:mm:ss” |
TIME | Конвертирует значение в TIME | ”hh:mm:ss” |
DECIMAL[(M[,D])] | Конвертирует значение в DECIMAL. M - знаки до запятой, D - после. По умолчанию M=10, D=0 | DECIMAL(10,2) |
CHAR[(N)] | Конвертирует значение в CHAR с максимальной длиной N | CHAR(50) |
SIGNED | Конвертирует значение в BIGINT | - |
UNSIGNED | Конвертирует значение в беззнаковый BIGINT | - |
BINARY | Конвертирует значение в BINARY | - |
YEAR | Конвертирует значение в год | - |
Логические литералы.
Логический литерал — значения TRUE и FALSE, означающие истинность и ошибочность какого-либо утверждения. При интерпретации запроса, MySQL преобразует их в числа: TRUE и FALSE становятся 1 и 0 соответственно.
NULL.
Значение NULL означает «нет данных», «нет значения». Оно нужно, чтобы отличать визуально пустые значения, такие как строка нулевой длины или «пробел», от того, когда значения вообще нет, даже пустого.
Арифметические операторы.
Для числовых литералов в SQL есть все привычные арифметические операторы:
Оператор | Описание | Пример |
---|---|---|
%, MOD | Деление по модулю | 11 % 5 = 1 |
* | Умножение | 10 * 16 = 160 |
+ | Сложение | 98 + 2 = 100 |
- | Вычитание | 50 - 51 = -1 |
/ | Деление | 1 / 2 = 0.5 |
DIV | Целочисленное деление | 10 DIV 4 = 2 |