В стандарте SQL определено множество встроенных функций; при этом в большинстве реализаций SQL добавлены собственные встроенные функции. Многие из них выполняют различные преобразования типов данных. Например, встроенные функции MONTH()
и YEAR()
из СУБД DB2 принимают в качестве аргумента значения DATE или timestamp и возвращают целое число, представляющее соответственно месяц или год из заданного аргумента. Запрос, приведенный ниже, перечисляет имена и месяцы приема на работу каждого служащего, данные о котором содержатся в нашей учебной базе данных.
SELECT NAME, MONTH(HIRE-DATE)
FROM SALESREPS;
А этот запрос возвращает список служащих, нанятых на работу в 2006 году:
SELECT NAME, MONTH(HIRE_DATE)
FROM SALESREPS
WHERE YEAR(HIRE_DATE) = 2006;
Кроме того, встроенные функции часто используются для форматирования данных. Например, встроенная функция TO_CHAR()
из СУБД Oracle принимает в качестве аргументов значение типа DATE
и спецификацию формата, а возвращает строку, содержащую значение даты, отформатированное в соответствии со спецификацией. В результатах, возвращаемых запросом:
SELECT NAME, ТО_CHAR(HIRE_DATE, 'DAY MONTH DD, YYYY')
FROM SALESREPS;
благодаря использованию встроенной функции TO_CHAR()
все даты приема на работу будут иметь формат "Wednesday June 14, 2007".
В общем случае встроенную функцию можно использовать в любом месте инструкции SQL, в котором можно использовать константу того же типа данных. Здесь невозможно перечислить все встроенные функции, поддерживаемые распространенными диалектами SQL, поскольку их слишком много. В DB2 их около двух десятков, столько же, но своих встроенных функций, и в Oracle, а в SQL Server — еще больше. В стандарт SQL2 вошли наиболее полезные функции из этих реализаций SQL, зачастую с несколько отличным синтаксисом. Эти функции перечислены в табл. 1.
Таблица 1. Стандартные встроенные функции SQL
Функция | Возвращает |
BIT_LENGTH(строка) | Количество битов в битовой строке |
CAST(значение AS тип данных) | Значение, преобразованное в указанный тип данных (например, дата, преобразованная в строку) |
CHAR_LENGTH(строка) | Длина строки символов |
CONVERT(строка USING функция) | Строка, преобразованная в соответствии с указанной функцией |
CURRENT_DATE | Текущая дата |
CURRENT_TIME(точность) | Текущее время с указанной точностью |
CURRENT_TIMESTAMP(точность) | Текущие дата и время с указанной точностью |
EXTRACT(часть FROM значение) | Указанная часть (DAY, HOUR и т.д.) из значения типа DATETIME |
LOWER(строка) | Строка, переведенная в нижний регистр |
OCTET_LENGTH(строка) | Число 8-битовых байтов в строке символов |
POSITION(подстрока IN строка) | Позиция, с которой начинается вхождение подстроки в строку |
SUBSTRING(строка FROM n FOR длина) | Часть строки, начинающаяся с n-го символа и имеющая указанную длину |
TRANSLATE(строка USING функция) | Строка, транслированная с помощью указанной функции |
TRIM(BOTH символ FROM строка) | Строка, из которой удалены ведущие и конечные указанные символы |
TRIM(LEADING символ FROM строка) | Строка, из которой удалены ведущие указанные символы |
TRIM(TRAILING символ FROM строка) | Строка, из которой удалены конечные указанные символы |
UPPER(строка) | Строка, переведенная в верхний регистр |