Функции Transact-SQL. Операции над датами и временем в SQL Операции с датами sql

От автора: сегодня мы поговорим о том, как работают в SQL функции даты. В следующей таблице приведен список всех важных функций, связанных с датой и временем, которые доступны. Существуют и другие, поддерживаемые различными СУБД. Данный список представляет функции, доступные в СУБД MySQL.

ADDDATE(). Добавляет даты

ADDTIME(). Добавляет время

CONVERT_TZ(). Преобразует из одного часового пояса в другой

CURDATE(). Возвращает текущую дату

CURRENT_DATE(), CURRENT_DATE. Синонимы для CURDATE()

CURRENT_TIME(), CURRENT_TIME. Синонимы для CURTIME()

CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP. Синонимы для NOW()

CURTIME(). Возвращает текущее время

DATE_ADD(). Слагает две даты

DATE_FORMAT(). Задает указанный формат даты

DATE_SUB(). Вычитает одну дату из другой

DATE(). Извлекает часть, относящуюся к дате, из выражения представляющего дату или время и дату

DATEDIFF(). Вычитает одну дату из другой

DAY(). Синоним для DAYOFMONTH()

DAYNAME(). Возвращает день недели

DAYOFMONTH(). Возвращает день месяца (1-31)

DAYOFWEEK(). Возвращает индекс дня недели аргумента

DAYOFYEAR(). Возвращает номер дня в году (1-366)

EXTRACT. Извлекает часть, относящуюся к дате

FROM_DAYS(). Преобразует номер дня в дату

FROM_UNIXTIME(). Форматирует дату как временную метку UNIX

HOUR(). Извлекает час

LAST_DAY. Возвращает последний день месяца для аргумента

LOCALTIME(), LOCALTIME. Синоним для NOW()

LOCALTIMESTAMP, LOCALTIMESTAMP (). Синоним для NOW()

MAKEDATE(). Создает дату из года и дня года

MAKETIME. MAKETIME(). MICROSECOND(). Возвращает микросекунды из аргумента

MINUTE(). Возвращает минуты из аргумента

MONTH(). Возврат месяца из даты

MONTHNAME(). Возвращает название месяца

NOW(). Возвращает текущую дату и время

PERIOD_ADD(). Добавляет период к году-месяцу

PERIOD_DIFF(). Возвращает количество месяцев между периодами

QUARTER(). Возвращает квартал из аргумента

SEC_TO_TIME(). Преобразует секунды в формат «HH: MM: SS»

SECOND(). Возвращает секунды (0-59)

STR_TO_DATE(). Преобразует строку в дату

SUBDATE(). При вызове с тремя аргументами синоним DATE_SUB()

SUBTIME(). Вычитает время

SYSDATE(). Возвращает время выполнения функции

TIME_FORMAT(). Задает формат времени

TIME_TO_SEC(). Возвращает аргумент, преобразованный в секунды

TIME(). Извлекает часть, относящуюся ко времени, из переданного выражения

TimeDiff(). Вычитает время

TIMESTAMP(). С одним аргументом эта функция возвращает выражение даты или даты и времени. С двумя аргументами — слагает эти два аргумента

TIMESTAMPADD(). Добавляет интервал к выражению даты и времени

TIMESTAMPDIFF(). Вычитает интервал из выражения даты и времени

TO_DAYS(). Возвращает аргумент даты, преобразованный в дни

UNIX_TIMESTAMP(). Возвращает временную метку UNIX

UTC_DATE(). Возвращает текущую дату UTC

UTC_TIME(). Возвращает текущее время UTC

UTC_TIMESTAMP(). Возвращает текущую дату и время UTC

WEEK(). Возвращает номер недели

WEEKDAY(). Возвращает индекс дня недели

WEEKOFYEAR(). Возвращает календарный номер недели (1-53)

YEAR(). Возвращает год

YEARWEEK(). Возвращает год и неделю

ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)

При вызове со вторым аргументом, заданным в виде INTERVAL, функция ADDDATE() является синонимом DATE_ADD(). Связанная функция SUBDATE() является синонимом DATE_SUB(). Информацию об аргументе блока INTERVAL см. в разделе DATE_ADD().

При вызове со вторым аргументом, заданным в днях, MySQL рассматривает это как целое число дней для добавления в выражение.

ADDTIME(expr1,expr2)

ADDTIME () добавляет expr2 к expr1 и возвращает результат. Expr1 является выражением времени или даты и времени, в то время как expr2 является выражением времени.

CONVERT_TZ(dt,from_tz,to_tz)

Преобразует значение даты и времени dt из часового пояса, заданного в from_tz, в часовой пояс, заданный в to_tz, и возвращает полученное значение. Эта функция возвращает NULL, если аргументы недействительны.

CURDATE()

Возвращает текущую дату как значение в формате «YYYY-MM-DD» или YYYYMMDD, в зависимости от того, используется ли эта функция в строковом или в числовом контексте.

CURRENT_DATE и CURRENT_DATE()

CURRENT_DATE и CURRENT_DATE() являются синонимами для CURDATE()

CURTIME()

Возвращает текущее время как значение в формате «HH: MM: SS» или HHMMSS, в зависимости от того, используется ли функция в строковом или в числовом контексте. Значение выражается для текущего часового пояса.

CURRENT_TIME и CURRENT_TIME()

CURRENT_TIME и CURRENT_TIME() являются синонимами для CURTIME().

CURRENT_TIMESTAMP и CURRENT_TIMESTAMP()

CURRENT_TIMESTAMP и CURRENT_TIMESTAMP() являются синонимами для NOW().

DATE(expr)

Извлекает часть, относящуюся к дате, из выражения даты или даты и времени expr.

DATEDIFF(expr1,expr2)

DATEDIFF() возвращает expr1.expr2, выраженное как количество дней между двумя датами. И expr1, и expr2 являются выражениями даты или даты и времени. В расчетах используются только части относящиеся к дате.

DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)

Эти функции выполняют арифметические операции с датами. date представлено как значение DATETIME или DATE, указывающее начальную дату. expr представляет собой выражение, определяющее значение интервала, который нужно добавить или вычесть из исходной даты. expr — это строка; она может начинаться с «-» для отрицательных интервалов.

unit является ключевым словом, указывающим единицы измерения для выражения. Ключевое слово INTERVAL и обозначение единиц не чувствительны к регистру. В следующей таблице показана ожидаемая форма аргумента expr для каждого значения единицы измерения.

Значения QUARTER и WEEK доступны в MySQL начиная с версии 5.0.0.

DATE_FORMAT (date,format)

Эта команда задает формат значения date в соответствии с указанной строкой format. В строке format могут использоваться следующие указатели. Перед указателями формата необходимо добавлять символ ‘%’.

%a. Сокращенное название дня недели (Sun..Sat)

%b. Сокращенное название месяца (Jan..Dec)

%с. Числовое обозначение месяца (0…12)

%D. День месяца с английским суффиксом (0, 1, 2, 3,.)

%d. Числовое обозначение дня месяца (00..31)

%е. Числовое обозначение дня месяца (00..31)

%f. Микросекунды (000000..999999)

%H. Час (00..23)

%h. Час (01..12)

%I. Час (01..12)

%i. Числовое обозначение минут (00..59)

%J. День года (001..366)

%k. Час (0..23)

%l. Час (1..12)

%M. Название месяца (January..December)

%м. Числовое обозначение месяца (00..12)

%р. AM или PM

%r. Время, 12-часовой формат (чч: мм: сс, за которым следуют AM или PM)

%S. Секунды (00..59)

%s. Секунды (00..59)

%Т. Время, 24-часовой формат (чч: мм: сс)

%U. Неделя (00..53), где воскресенье — первый день недели

%u. Неделя (00..53), где понедельник — первый день недели

%V. Неделя (01..53), где воскресенье — первый день недели; используется вместе с %X

%v. Неделя (01..53), где понедельник — первый день недели; используется вместе с %x

%W. Название дня недели (Sunday..Saturday)

%w. День недели (0=Sunday..6=Saturday)

%X. Год для недели, где первый день недели — воскресенье, число из четырех цифр; используется вместе с %V

%x. Год для недели, где первый день недели — понедельник, число из четырех цифр; используется вместе с %V

%Y. Год, число, четыре цифры

%y. Числовое обозначение года (две цифры)

%%. Буквально символ %

%x. x, для всех.x., не перечисленных выше

DATE_SUB(date,INTERVAL expr unit)

Аналогично функции DATE_ADD ().

DAY(date)

DAY() является синонимом функции DAYOFMONTH().

DAYNAME(date)

Возвращает день недели для указанной даты.

DAYOFMONTH(date)

Возвращает день месяца для указанной даты в диапазоне от 0 до 31.

DAYOFWEEK(date)

Возвращает индекс дня недели (1 = Sunday, 2 = Monday, ., 7 = Saturday). Эти значения индекса соответствуют стандарту ODBC.

DAYOFYEAR(date)

Возвращает день года для указанной даты в диапазоне от 1 до 366.

EXTRACT(unit FROM date)

Функция EXTRACT() использует те же типы указателей единиц измерения, что и DATE_ADD() или DATE_SUB(), но не выполняет арифметические операции с датами, а извлекает из даты часть относящуюся к указателю единиц измерения.

FROM_DAYS(N)

Возвращается значение DATE с учетом числа дней N.

Примечание. Используйте FROM_DAYS() для старых дат осторожно. Функция не предназначена для работы со значениями дат до введения григорианского календаря (1582).

FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)

Возвращает представление аргумента unix_timestamp как значение в формате «YYYY-MM-DD HH: MM: SS или YYYYMMDDHHMMSS» в зависимости от того, используется ли эта функция в строковом или в числовом контексте. Значение выражается в текущем часовом поясе. Параметр unix_timestamp является внутренним значением метки времени, которое создается функцией UNIX_TIMESTAMP().

Если format указано, результат форматируется в соответствии со строкой format, которая используется так же, как описано в разделе DATE_FORMAT().

HOUR(time)

Возвращает часы из указанного времени. Диапазон возвращаемого значения составляет от 0 до 23. Однако диапазон значений TIME на самом деле намного больше, поэтому HOUR может возвращать значения, превышающие 23.

LAST_DAY(date)

Принимает значение даты или даты и времени и возвращает значение, соответствующее последнему дню месяца. Возвращает NULL, если аргумент недействителен.

LOCALTIME и LOCALTIME()

LOCALTIME и LOCALTIME() являются синонимами для NOW().

LOCALTIMESTAMP и LOCALTIMESTAMP()

LOCALTIMESTAMP и LOCALTIMESTAMP() являются синонимами для NOW().

MAKEDATE(year,dayofyear)

Возвращает значения даты, заданного года и дня года. Значение dayofyear должно быть больше 0 или результат будет NULL.

MAKETIME(hour,minute,second)

Возвращает значение времени, рассчитанное из аргументов hour, minute и second.

MICROSECOND(expr)

Возвращает микросекунды из выражения времени или выражения datetime(expr) в виде числа в диапазоне от 0 до 999999.

MINUTE(time)

Возвращает минуты для указанного времени, в диапазоне от 0 до 59.

MONTH(date)

Возвращает месяц для указанной даты в диапазоне от 0 до 12.

MONTHNAME(date)

Возвращает полное название месяца для указанной даты.

NOW()

Возвращает текущую дату и время как значение в формате «YYYY-MM-DD HH: MM: SS» или YYYYMMDDHHMMSS, в зависимости от того, используется ли функция в строковом или числовом контексте. Это значение выражается в текущем часовом поясе.

PERIOD_ADD(P,N)

Добавляет N месяцев к периоду P (в формате YYMM или YYYYMM). Возвращает значение в формате YYYYMM. Обратите внимание, что аргумент периода P не является значением даты.

PERIOD_DIFF(P1,P2)

Возвращает количество месяцев между периодами P1 и P2. Периоды P1 и P2 должны указываться в формате YYMM или YYYYMM. Обратите внимание, что аргументы периодов P1 и P2 не являются значениями даты.

QUARTER(date)

Возвращает квартал года для указанной даты в диапазоне от 1 до 4.

SECOND(time)

Возвращает значение секунд для времени в диапазоне от 0 до 59.

SEC_TO_TIME(seconds)

Возвращает аргумент seconds, преобразованный в часы, минуты и секунды в формате «HH: MM: SS» или HHMMSS, в зависимости от того, используется ли функция в строковом или числовом контексте.

STR_TO_DATE(str,format)

Это инверсивная функция к функции DATE_FORMAT(). Она принимает строку str и строку формата format. Функция STR_TO_DATE() возвращает значение DATETIME, если строка формата содержит как дату, так и время. В противном случае она возвращает значение DATE или TIME, если строка содержит только дату или время.

SUBDATE(date,INTERVAL expr unit) и SUBDATE(expr,days)

Если SUBDATE() вызывается со вторым аргументом, заданным в виде INTERVAL, функция является синонимом DATE_SUB(). Информацию об аргументе INTERVAL смотрите в разделе DATE_ADD().

SUBTIME(expr1,expr2)

Функция SUBTIME() возвращает expr1. expr2 выражается как значение в том же формате, что и expr1. Значение expr1 является выражением времени или даты и времени, а значение expr2 является выражением времени.

SYSDATE()

Возвращает текущую дату и время как значение в формате «YYYY-MM-DD HH: MM: SS» или YYYYMMDDHHMMSS, в зависимости от того, используется ли функция в строковом или в числовом контексте.

TIME(expr)

Извлекает часть, относящуюся ко времени, выражения expr и возвращает его в виде строки.

TIMEDIFF(expr1,expr2)

Функция TIMEDIFF() возвращает expr1 . expr2 выражается как значение времени. Значения expr1 и expr2 представляют собой выражения времени или даты и времени, но оба они должны быть одного типа.

TIMESTAMP (expr), TIMESTAMP (expr1, expr2)

С одним указанным аргументом эта функция возвращает выражение даты или даты и времени expr, как значение даты и времени. С двумя аргументами она добавляет выражение времени expr2 к выражению даты или даты и времени expr1 и возвращает результат как значение даты и времени.

TIMESTAMPADD(unit,interval,datetime_expr)

Эта функция добавляет целочисленное выражение interval к выражению даты или времени datetime_expr. Единицы измерения для интервала задаются аргументом unit, который может принимать одно из следующих значений:

Значение unit может быть указано с использованием одного из ключевых слов, как было показано выше, или с префиксом SQL_TSI_. Например, DAY и SQL_TSI_DAY являются действительными значениями.

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Возвращает целочисленную разницу между выражениями даты или даты и времени datetime_expr1 и datetime_expr2. Единицы измерения для результата задаются аргументом unit. Действительными для аргумента unit являются те же значения, которые были перечислены в описании функции TIMESTAMPADD().

TIME_FORMAT(time,format)

Эта функция используется так же, как и функция DATE_FORMAT(), но строка format может содержать указатели формата только для часов, минут и секунд.

Если значение времени содержит часть, относящуюся к часам, которая больше 23, указатели формата часов %H и %k дают значение, большее, чем обычный диапазон от 0 до 23. Другие указатели формата часов дают значение часа 12 по модулю.

TIME_TO_SEC(time)

Возвращает аргумент time, преобразованный в секунды.

TO_DAYS(date)

Возвращает номер дня (количество дней с 0-го года) для заданной даты date.

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

Если эта функция вызывается без аргумента, она возвращает временную метку Unix (секунды с «1970-01-01 00:00:00» UTC), как целое положительное число. Если UNIX_TIMESTAMP() вызывается с аргументом date, она возвращает значение аргумента, выраженное в секундах с «1970-01-01 00:00:00» UTC. date может быть строкой DATE, строкой DATETIME, TIMESTAMP или числом в формате YYMMDD или YYYYMMDD.

UTC_DATE, UTC_DATE()

Возвращает текущую дату UTC как значение в формате «YYYY-MM-DD» или YYYYMMDD, в зависимости от того, используется ли эта функция в строковом или числовом контексте.

UTC_TIME, UTC_TIME()

Возвращает текущее время UTC как значение в формате «HH: MM: SS» или HHMMSS, в зависимости от того, используется ли функция в строковом или числовом контексте.

UTC_TIMESTAMP, UTC_TIMESTAMP()

Возвращает текущую дату и время UTC как значение «YYYY-MM-DD HH: MM: SS» или в формате YYYYMMDDHHMMSS, в зависимости от того, используется ли эта функция в строковом или в числовом контексте.

WEEK(date[,mode])

Эта функция возвращает номер недели для заданной даты date. Форма WEEK() с двумя аргументами позволяет указать, будет ли неделя начинаться в воскресенье или в понедельник, и должно ли возвращаемое значение находиться в диапазоне от 0 до 53 или от 1 до 53. Если аргумент mode опущен, используется значение системной переменной default_week_format

WEEKDAY(date)

Возвращает индекс дня недели для заданной даты date (0 = понедельник, 1 = вторник, 6 = воскресенье).

WEEKOFYEAR(date)

Возвращает календарную неделю для заданной даты date как число в диапазоне от 1 до 53. WEEKOFYEAR() — это функция совместимости, эквивалентная WEEK(date,3).

YEAR(date)

Возвращает год для заданной даты date в диапазоне от 1000 до 9999 или 0 для даты.zero.

YEARWEEK(date), YEARWEEK(date,mode)

Возвращает год и неделю для заданной даты date. Параметр mode работает точно так же, как аргумент mode для функции WEEK(). Год в результате может отличаться от года в аргументе даты для первой и последней недели года.

Примечание. Номер недели отличается от того, что вернет функция WEEK() (0) для необязательных аргументов 0 или 1, так как WEEK() вернет неделю в контексте данного года.

SQL работа с датами – настолько важна, что без знания основных sql операторов ни в одном стоящем проекте нельзя обойтись. Как ни крути, но во всех сервисах существует надобность работы со временем. Как правило, это вычисление периодов с одной по другую дату, например вывод списка зарегистрировавшихся пользователей за год, месяц, день, час.

Я хочу привести ряд решений на часто встречающиеся задачи по работе с датами в SQL, с которыми сам ежедневно сталкивался, надеюсь, это будет актуально и полезно для вас.

Как получить текущую дату в SQL
WHERE date = CURDATE()
или другой вариант
WHERE date = STR_TO_DATE(now(), "%Y-%m-%d")

Прибавить к дате один час в SQL
DATE_ADD("2013-03-30", INTERVAL 1 HOUR)

Прибавить к дате один день в SQL
DATE_ADD("2013-03-30", INTERVAL 1 DAY)
Аналогично можно прибавлять любое количество дней к текущей дате.

Прибавить к дате один месяц в SQL
DATE_ADD("2013-03-30", INTERVAL 1 MONTH)
Аналогично можно прибавлять любое количество месяцев к текущей дате.

Получить вчерашний день в SQL
DATE_ADD(CURDATE(), INTERVAL -1 DAY)
или
DATE_SUB(CURDATE(), INTERVAL 1 DAY)

Получить дату начала текущей недели в SQL
эта одна из самых сложных на первый взгляд задач, но решается очень просто
CURDATE()-WEEKDAY(CURDATE());

Получить выборку с этого понедельника по текущий день недели в SQL

Получить выборку с первого числа текущего месяца по текущий день недели в SQL
WHERE (date BETWEEN (CURDATE()-WEEKDAY(CURDATE())) AND CURDATE())

Как получить дату рождения пользователя в SQL
SELECT name, birth, CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(birth)) - (RIGHT(CURRENT_DATE,5)

Найти всех пользователей у которых день рождение в следующем месяце в SQL
SELECT name, birth FROM user WHERE MONTH(birth) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
или другой вариант
SELECT name, birth FROM pet WHERE MONTH(birth) = MOD(MONTH(NOW()), 12) + 1;

Кроме вышеприведенных кейсов по работе с датами в SQL, рекомендую ознакомиться с документацией по следующим операторам:
NOW() – Возвращает текущую дату и время.
CURDATE() – Возвращает текущую дату.
CURTIME() – Возвращаем текущее время.
DATE() – Состоит из двух частей даты и времени.
EXTRACT() – Возвращает одно значения даты/времени.
DATE_ADD() – Добавляет до выборки указанное число дней/мину/часов и т.д.
DATE_SUB() – Вычитываем указанный интервал от даты.
DATEDIFF() – Возвращает значение времени между двумя датами.
DATE_FORMAT() – Функция для различного вывода информации о времени.

Работа с датами в SQl, как оказывается не такая сложная, и теперь вместо того чтобы вычислять периоды средствами PHP можно делать это еще на этапе выполнения SQL запроса и получать необходимую выборку данных.

SQL - Урок 13. Функции даты и времени

Эти функции предназначены для работы с календарными типами данных. Рассмотрим наиболее применимые.
  • CURDATE(), CURTIME() и NOW() Первая функция возвращает текущую дату, вторая - текущее время, а третья - текущую дату и время. Сравните:

    SELECT CURDATE(), CURTIME(), NOW();


    Функции CURDATE() и NOW() удобно использовать для добавления в базу данных записей, использующих текущее время. В нашем магазине все поставки и продажи используют текущее время. Поэтому для добавления записей о поставах, и продажах удобно использовать функцию CURDATE(). Например, пусть в наш магазин пришел товар, давайте добавим информацию об этом в таблицу Поставка (incoming):

    INSERT INTO incoming (id_vendor, date_incoming) VALUES ("2", curdate());


    Если бы мы хранили дату поставки с типом datatime, то нам больше подошла бы функция NOW().

  • ADDDATE(date, INTERVAL value) Функция возвращает дату date, к которой прибавлено значение value. Значение value может быть отрицательным, тогда итоговая дата уменьшится. Давайте посмотрим, когда наши поставщики делали поставки товара:

    SELECT id_vendor, date_incoming FROM incoming;


    Предположим, мы ошиблись при вводе даты для первого поставщика, давайте уменьшим его дату на одни сутки:
    В качестве значения value могут выступать не только дни, но и недели (WEEK), месяцы (MONTH), кварталы (QUARTER) и годы (YEAR). Давайте для пример уменьшим дату поставки для второго поставщика на 1 неделю:
    В нашей таблице Поставки (incoming) мы использовали для столбца Дата поставки (date_incoming) тип date. Как вы помните из урока 2, этот тип данных предназначен для хранения только даты. А вот если бы мы использовали тип datatime, то у нас отображалась бы не только дата, но и время. Тогда мы могли бы использовать функцию ADDDATE и для времени. В качестве значения value в этом случае могут выступать секунды (SECOND), минуты (MINUTE), часы (HOUR) и их комбинации:
    минуты и секунды (MINUTE_SECOND),
    часы, минуты и секунды (HOUR_SECOND),
    часы и минуты (HOUR_MINUTE),
    дни, часы, минуты и секунды (DAY_SECOND),
    дни, часы и минуты (DAY_MINUTE),
    дни и часы (DAY_HOUR),
    года и месяцы (YEAR_MONTH).
    Например, давайте к дате 15 апреля 2011 года две минуты первого прибавим 2 часа 45 минут:

    SELECT ADDDATE("2011-04-15 00:02:00", INTERVAL "02:45" HOUR_MINUTE);



  • SUBDATE(date, INTERVAL value) функция идентична предыдущей, но производит операцию вычитания, а не сложения.

    SELECT SUBDATE("2011-04-15 00:02:00", INTERVAL "23:53" HOUR_MINUTE);



  • PERIOD_ADD(period, n) функция добавляет n месяцев к значению даты period. Нюанс: значение даты должно быть представлено в формате YYYYMM. Давайте к февралю 2011 (201102) прибавим 2 месяца:

    SELECT PERIOD_ADD(201102, 2);



  • TIMESTAMPADD(interval, n, date) функция добавляет к дате date временной интервал n, значения которого задаются параметром interval. Возможные значения параметра interval:

    FRAC_SECOND - микросекунды
    SECOND - секунды
    MINUTE - минуты
    HOUR - часы
    DAY - дни
    WEEK - недели
    MONTH - месяцы
    QUARTER - кварталы
    YEAR - годы

    SELECT TIMESTAMPADD(DAY, 2, "2011-04-02");



  • TIMEDIFF(date1, date2) вычисляет разницу в часах, минутах и секундах между двумя датами.

    SELECT TIMEDIFF("2011-04-17 23:50:00", "2011_04-16 14:50:00");



  • DATEDIFF(date1, date2) вычисляет разницу в днях между двумя датами. Например, мы хотим узнать, как давно поставщик "Вильямс" (id=1) поставлял нам товар:

  • PERIOD_DIFF(period1, period2) функция вычисляет разницу в месяцах между двумя датами, представленными в формате YYYYMM. Давайте узнаем разницу между январем 2010 и августом 2011:

    SELECT PERIOD_DIFF(201108, 201001);



  • TIMESTAMPDIFF(interval, date1, date2) функция вычисляет разницу между датами date2 и date1 в единицах, указанных в параметре interval. Возможные значения параметра interval:

    FRAC_SECOND - микросекунды
    SECOND - секунды
    MINUTE - минуты
    HOUR - часы
    DAY - дни
    WEEK - недели
    MONTH - месяцы
    QUARTER - кварталы
    YEAR - годы

    SELECT TIMESTAMPDIFF(DAY, "2011-04-02", "2011-04-17") AS days, TIMESTAMPDIFF(HOUR, "2011-04-16 20:14:00", "2011-04-17 23:58:20") AS houres;



  • SUBTIME(date, time) функция вычитает из времени date время time:

    SELECT SUBTIME("2011-04-18 23:17:00", "02:15:30");



  • DATE(datetime) возвращает дату, отсекая время. Например:

    SELECT DATE("2011-04-15 00:03:20");



  • TIME(datetime) возвращает время, отсекая дату. Например:

    SELECT TIME("2011-04-15 00:03:20");



  • TIMESTAMP(date) функция принимает дату date и возвращает полный вариант со временем. Например:

    SELECT TIMESTAMP("2011-04-17");



  • DAY(date) и DAYOFMONTH(date) функции-синонимы, возвращают из даты порядковый номер дня месяца:

    SELECT DAY("2011-04-17"), DAYOFMONTH("2011-04-17");



  • DAYNAME(date), DAYOFWEEK(date) и WEEKDAY(date) функции возвращают день недели, первая - его название, вторая - номер дня недели (отсчет от 1 - воскресенье до 7 - суббота), третья - номер дня недели (отсчет от 0 - понедельник, до 6 - воскресенье:

    SELECT DAYNAME("2011-04-17"), DAYOFWEEK("2011-04-17"), WEEKDAY("2011-04-17");



  • WEEK(date), WEEKOFYEAR(datetime) обе функции возвращают номер недели в году, первая для типа date, а вторая - для типа datetime, у первой неделя начинается с воскресенья, у второй - с понедельника:

    SELECT WEEK("2011-04-17"), WEEKOFYEAR("2011-04-17 23:40:00");



  • MONTH(date) и MONTHNAME(date) обе функции возвращают значения месяца. Первая - его числовое значение (от 1 до 12), вторая - название месяца:

    SELECT MONTH("2011-04-17"), MONTHNAME("2011-04-17");



  • QUARTER(date) функция возвращает значение квартала года (от 1 до 4):

    SELECT QUARTER("2011-04-17");



  • YEAR(date) функция возвращает значение года (от 1000 до 9999):

    SELECT YEAR("2011-04-17");



  • DAYOFYEAR(date) возвращает порядковый номер дня в году (от 1 до 366):

    SELECT DAYOFYEAR("2011-04-17");



  • HOUR(datetime) возвращает значение часа для времени (от 0 до 23):

    SELECT HOUR("2011-04-17 18:20:03");



  • MINUTE(datetime) возвращает значение минут для времени (от 0 до 59): SELECT UNIX_TIMESTAMP("2011-04-17"), FROM_UNIXTIME(1302524000);

  • TIME_TO_SEC(time) и SEC_TO_TIME(n) взаимообратные функции. Первая преобразует время в количество секунд, прошедших от начала суток. Вторая, наоборот, принимает число секунд с начала суток и преобразует их во время:

    SELECT TIME_TO_SEC("22:10:30"), SEC_TO_TIME(45368);



  • MAKEDATE(year, n) функция принимает год и номер дня в году и преобразует их в дату:

    SELECT MAKEDATE(2011, 120);



Ну вот, на сегодня все. В следующий раз рассмотрим функции, которые помогают переводить даты из одного формата в другой.

Стандарт SQL-92 специфицирует только функции, возвращающие системную дату/время. Например, функция CURRENT_TIMESTAMP возвращает сразу и дату, и время. Плюс имеются функции возвращающие что-либо одно.
Естественно, в силу такой ограниченности, реализации языка расширяют стандарт за счет добавления функций, облегчающий работу пользователей с данными этого типа. Здесь мы рассмотрим функции обработки даты/времени в T-SQL.

Функция DATEADD

Синтаксис

DATEADD (datepart , number , date )

Эта функция возвращает значение типа datetime , которое получается добавлением к дате date количества интервалов типа datepart , равного number . Например, мы можем к заданной дате добавить любое число лет, дней, часов, минут и т.д. Допустимые значения аргумента datepart приведены ниже и взяты из BOL.


Пусть сегодня 23/01/2004, и мы хотим узнать, какой день будет через неделю. Мы можем написать потому, что дробная часть значения аргумента datepart отбрасывается, и мы получим 0 вместо одной четвертой и, как следствие, текущий день.
Кроме того, мы можем использовать вместо CURRENT_TIMESTAMP функцию T-SQL GETDATE() с тем же самым эффектом. Наличие двух идентичных функций поддерживается, видимо, в ожидании последующего развития стандарта.
Пример (схема 4). Определить, какой будет день через неделю после последнего полета.
SELECT DATEADD(day, 7, (SELECT MAX(date) max_date FROM pass_in_trip))
Использование подзапроса в качестве аргумента допустимо, т.к. этот подзапрос возвращает ЕДИНСТВЕННОЕ значение типа datetime .

Функция DATEDIFF

Синтаксис

DATEDIFF (datepart , startdate , enddate )

Функция возвращает интервал времени, прошедшего между двумя временными отметками - startdate (начальная отметка) и enddate (конечная отметка). Этот интервал может быть измерен в разных единицах. Возможные варианты определяются аргументом datepart и перечислены выше применительно к функции DATEADD .
Пример (схема 4). Определить количество дней, прошедших между первым и последним совершенными рейсами.

(которое дает -760) будет неверным по двум причинам.
Во-первых, для рейсов, которые вылетают в один день, а прилетают на следующий, вычисленное таким способом значение будет неправильным. Во-вторых, ненадежно делать какие либо предположения относительно дня, который присутствует только в силу необходимости соответствовать типу datetime .
Но как определить, что самолет приземлился на следующий день? Тут помогает описание предметной области, где говорится, что полет не может продолжаться более суток. Итак, если время прилета не больше, чем время вылета, то этот факт имеет место. Теперь второй вопрос: как посчитать только время, с каким бы днем оно ни стояло?
Здесь может помочь функция T-SQL DATEPART .

Функция DATEPART

Синтаксис

DATEPART (datepart , date )

Эта функция возвращает целое число, представляющее собой указанную аргументом datepart часть заданной вторым аргументом даты (date ).
Список допустимых значений аргумента datepart , описанный выше в данном разделе, дополняется еще одним значением


Заметим, что возвращаемое функцией DATEPART значение в этом случае (номер дня недели) зависит от настроек, которые можно изменить с помощью оператора SET DATEFIRST , устанавливающего первый день недели. Для кого-то понедельник - день тяжелый, а для кого-то - воскресенье. Кстати, последнее значение принимается по умолчанию.
Однако вернемся к нашему примеру. В предположении, что время вылета/прилета является кратным минуте, мы можем его определить как сумму часов и минут. Поскольку функции даты/времени работают с целочисленными значениями, приведем результат к наименьшему интервалу - минутам. Итак, время вылета рейса 1123 в минутах

Теперь мы должны сравнить, превышает ли время прилета время вылета. Если это так, вычесть из первого второе, чтобы получить продолжительность рейса. В противном случае к разности нужно добавить одни сутки (24*60 = 1440 минут).

SELECT CASE WHEN time_dep>=time_arr THEN time_arr-time_dep+1440 ELSE time_arr-time_dep END dur FROM
(SELECT DATEPART(hh, time_out)*60 + DATEPART(mi, time_out) time_dep, DATEPART(hh, time_in)*60 + DATEPART(mi, time_in) time_arr FROM trip WHERE trip_no=1123
) tm
Здесь, чтобы не повторять длинные конструкции в операторе CASE, использован подзапрос. Конечно, результат получился достаточно громоздким, зато абсолютно корректным в свете сделанных к этой задаче замечаний.
Пример (4 схема). Определить дату и время вылета рейса 1123.
В таблице совершенных рейсов Pass_in_trip содержится только дата рейса, но не время, т.к. в соответствии с предметной областью каждый рейс может выполняться только один раз в день. Для решения этой задачи нужно к дате, хранящейся в таблице Pass_in_trip, добавить время из таблицы Trip
DISTINCT необходим здесь, чтобы исключить возможные дубликаты, поскольку номер и дата рейса дублируются в этой таблице для каждого пассажира данного рейса.

Функция DATENAME

Синтаксис

DATENAME (datepart , date )

Эта функция возвращает символьное представление составляющей (datepart ) указанной даты (date ). Аргумент, определяющий составляющую даты, может принимать одно из значений, перечисленных в вышеприведенной таблице.
Это дает нам простую возможность конкатенировать компоненты даты, получая любой нужный формат представления. Например, конструкция

Следует отметить, что данная функция выявляет отличие значений day и dayofyear аргумента datepart . Первый дает символьное представление дня указанной даты, в то время как второй дает символьное представление этого дня от начала года. Т.е.
SELECT DATENAME (day , "2003-12-31")
даст нам 31, а
SELECT DATENAME (dayofyear , "2003-12-31")
- 365.
В ряде случаев функцию DATEPART можно заменить более простыми функциями. Вот они:
DAY (date ) - целочисленное представление дня указанной даты. Эта функция эквивалентна функции DATEPART (dd , date ).
MONTH (date ) - целочисленное представление месяца указанной даты. Эта функция эквивалентна функции DATEPART (mm , date ).
YEAR (date ) - целочисленное представление года указанной даты. Эта функция эквивалентна функции DATEPART (yy , date ).

Функция @@DATEFIRST

@@DATEFIRST возвращает число, которое определяет первый день недели, установленный для текущей сессии. При этом 1 соответствует понедельнику, а 7, соответственно, воскресенью. Т.е. если

SELECT @@DATEFIRST;
возвращает 7, то первым днем недели считается воскресенье (соответствует текущим настройкам на сайте).

Функции языка Transact-SQL могут быть агрегатными или скалярными. Эти типы функций рассматриваются в этой статье.

Агрегатные функции

Агрегатные функции выполняют вычисления над группой значений столбца и всегда возвращают одно значение результата этих вычислений. Язык Transact-SQL поддерживает несколько обычных агрегатных функций:

AVG

Вычисляет среднее арифметическое значение данных, содержащихся в столбце. Значения, над которыми выполняется вычисление, должны быть числовыми.

MIN и MAX

Определяют максимальное и минимальное значение из всех значений данных, содержащихся в столбце. Значения могут быть числовыми, строковыми или временными (дата/время).

SUM

Вычисляет общую сумму значений в столбце. Значения, над которыми выполняется вычисление, должны быть числовыми.

COUNT

Подсчитывает количество значений, отличных от null в столбце. Функция count(*) является единственной агрегатной функцией, которая не выполняет вычисления над столбцами. Эта функция возвращает количество строк (независимо от того, содержат ли отдельные столбцы значения null).

COUNT_BIG

Аналогична функции count, с той разницей, что возвращает значение данных типа BIGINT.

Использование обычных агрегатных функций в инструкции SELECT будет рассматриваться в одной из следующих статей.

Скалярные функции

Скалярные функции Transact-SQL используются в создании скалярных выражений. (Скалярная функция выполняет вычисления над одним значением или списком значений, тогда как агрегатная функция выполняет вычисления над группой значений из нескольких строк.) Скалярные функции можно разбить на следующие категории:

    числовые функции;

    функции даты;

    строковые функции;

    системные функции;

    функции метаданных.

Эти типы функций рассматриваются в последующих разделах.

Числовые функции

Числовые функции языка Transact-SQL - это математические функции для модифицирования числовых значений. Список числовых функций и их краткое описание приводится в таблице ниже:

Числовые функции Transact-SQL
Функция Синтаксис Описание Пример использования
ABS ABS(n)

Возвращает абсолютное значение (т. е. отрицательные значения возвращаются, как положительные) числового выражения n.

SELECT ABS(-5.320) -- Вернет 5.320 SELECT ABS(8.90) -- Вернет 8.90

ACOS, ASIN, ATAN, ATN2 ACOS(n), ASIN(n), ATAN(n), ATN2(n, m)

Обратные тригонометрические функции, вычисляющие арккосинус, арксинус, арктангенс значения n (для ATN2 вычисляется арктангенс n/m). Исходные значения n, m и результат имеют тип данных FLOAT.

COS, SIN, TAN, COT COS(n), SIN(n), TAN(n), COT(n)

Тригонометрические функции, вычисляющие косинус, синус, тангенс, котангенс значения n. Результат имеет тип данных FLOAT.

DEGREES, RADIANS DEGREES(n), RADIANS(n)

Функция DEGREES преобразует радианы в градусы, RADIANS соответственно наоборот.

SELECT DEGREES(PI() / 4) -- Вернет 45 SELECT COS(RADIANS(60.0)) -- Вернет 0.5

CEILING CEILING(n)

Округляет число до большего целого значения.

SELECT CEILING(-5.320) -- Вернет -5 SELECT CEILING(8.90) -- Вернет 9

ROUND ROUND(n, p, [t])

Округляет значение n с точностью до p. Когда аргумент p положительное число, округляется дробная часть числа n, а когда отрицательное - целая часть. При использовании необязательного аргумента t, число n не округляется, а усекается (т.е. округляется в меньшую сторону).

SELECT ROUND(5.3208, 3) -- Вернет 5.3210 SELECT ROUND(125.384, -1) -- Вернет 130.000 SELECT ROUND(125.384, -1, 1) -- Вернет 120.000

FLOOR FLOOR(n)

Округляет до меньшего целого значения.

SELECT FLOOR(5.88) -- Вернет 5

EXP EXP(n)

Вычисляет значение e n .

LOG, LOG10 LOG(n), LOG10(n)

LOG(n) - вычисляет натуральный логарифм (т.е. с основанием e) числа n, LOG10(n) - вычисляет десятичный (с основанием 10) логарифм числа n.

PI PI()

Возвращает значение π (3,1415).

POWER POWER(x, y)

Вычисляет значение x y .

RAND RAND()

Возвращает произвольное число типа FLOAT в диапазоне значений между 0 и 1.

ROWCOUNT_BIG ROWCOUNT_BIG()

Возвращает количество строк таблицы, которые были обработаны последней инструкцией Transact-SQL, исполненной системой. Возвращаемое значение имеет тип BIGINT.

SIGN SIGN(n)

Возвращает знак значения n в виде числа: +1, если положительное, -1, если отрицательное.

SQRT, SQUARE SQRT(n), SQUARE(n)

SQRT(n) - вычисляет квадратный корень числа n, SQUARE(n) - возвращает квадрат аргумента n.

Функции даты

Функции даты вычисляют соответствующие части даты или времени выражения или возвращают значение временного интервала. Поддерживаемые в Transact-SQL функции даты и их краткое описание приводятся в таблице ниже:

Функции даты Transact-SQL
Функция Синтаксис Описание Пример использования
GETDATE GETDATE()

Возвращает текущую системную дату и время.

SELECT GETDATE()

DATEPART DATEPART (item, date)

Возвращает указанную в параметре item часть даты date в виде целого числа.

Вернет 1 (Январь) SELECT DATEPART(month, "01.01.2012") -- Вернет 4 (Wednesday) SELECT DATEPART(weekday, "02.01.2012")

DATENAME DATENAME (item, date)

Возвращает указанную в параметре item часть даты date в виде строки символов.

Вернет January SELECT DATENAME(month, "01.01.2012") -- Вернет Wednesday SELECT DATENAME(weekday, "02.01.2012")

DATEDIFF DATEDIFF (item, dat1, dat2)

Вычисляет разницу между двумя частями дат dat1 и dat2 и возвращает целочисленный результат в единицах, указанных в аргументе item.

Вернет 19 (19 лет промежуток между датами) SELECT DATEDIFF(year, "01.01.1990", "01.01.2010") -- Вернет 7305 (7305 дней промежуток между датами) SELECT DATEDIFF(day, "01.01.1990", "01.01.2010")

DATEADD DATEADD (item, n, date)

Прибавляет n-е количество единиц, указанных в аргументе item к указанной дате date. (Значение аргумента n также может быть отрицательным.)

Прибавит 3 дня к текущей дате SELECT DATEADD(day, 3, GETDATE())

Строковые функции

Строковые функции манипулируют значениями столбцов, которые обычно имеют символьный тип данных. Поддерживаемые в Transact-SQL строковые функции и их краткое описание приводятся в таблице ниже:

Строковые функции Transact-SQL
Функция Синтаксис Описание Пример использования
ASCII, UNICODE ASCII(char), UNICODE(char)

Преобразовывает указанный символ в соответствующее целое число кода ASCII.

SELECT ASCII("W") -- 87 SELECT UNICODE("ю") -- 1102

CHAR, NCHAR CHAR(int), NCHAR(int)

Преобразовывает код ASCII (или Unicode если NCHAR) в соответствующий символ.

SELECT CHAR(87) -- "W" SELECT NCHAR(1102) -- "ю"

CHARINDEX CHARINDEX (str1, str2)

Возвращает начальную позицию вхождения подстроки str1 в строку str2. Если строка str2 не содержит подстроки str1, возвращается значение 0

Вернет 5 SELECT CHARINDEX ("морф", "полиморфизм")

DIFFERENCE DIFFERENCE (str1, str2)

Возвращает целое число от 0 до 4, которое является разницей между значениями SOUNDEX двух строк str1 и str2. Метод SOUNDEX возвращает число, которое характеризует звучание строки. С помощью этого метода можно определить подобно звучащие строки. Работает только для символов ASCII.

Вернет 2 SELECT DIFFERENCE ("spelling", "telling")

LEFT, RIGHT LEFT (str, length), RIGHT (str, length)

Возвращает количество первых символов строки str, заданное параметром length для LEFT и последние length символов строки str для функции RIGHT.

DECLARE @str nvarchar(30) = "Синхронизация"; -- Вернет "Синх" SELECT LEFT(@str, 4) -- Вернет "зация" SELECT RIGHT(@str, 5)

LEN LEN(str)

Возвращает количество символов (не количество байт) строки str, указанной в аргументе, включая конечные пробелы.

LOWER, UPPER LOWER(str), UPPER(str)

Функция LOWER преобразовывает все прописные буквы строки str1 в строчные. Входящие в строку строчные буквы и иные символы не затрагиваются. Функция UPPER преобразовывает все строчные буквы строки str в прописные.

DECLARE @str nvarchar(30) = "Синхронизация"; -- Вернет "СИНХРОНИЗАЦИЯ" SELECT UPPER(@str) -- Вернет "синхронизация" SELECT LOWER(@str)

LTRIM, RTRIM LTRIM(str), RTRIM(str)

Функция LTRIM удаляет начальные пробелы в строке str, RTRIM соответственно удаляет пробелы в конце строки.

QUOTENAME QUOTENAME (char_string)

Возвращает строку в кодировке Unicode с добавленными ограничителями, чтобы преобразовать строку ввода в действительный идентификатор с ограничителями.

DECLARE @str nvarchar(30) = "Синхронизация"; -- Вернет "[Синхронизация]" SELECT QUOTENAME(@str)

PATINDEX PATINDEX (%p%, expr)

Возвращает начальную позицию первого вхождения шаблона p в заданное выражение expr, или ноль, если данный шаблон не обнаружен.

Вернет 4 SELECT PATINDEX("%хро%", "Синхронизация")

REPLACE REPLACE (str1, str2, str3)

Заменяет все вхождения подстроки str2 в строке str1 подстрокой str3.

Вернет "Десинхронизация" SELECT REPLACE("Синхронизация", "Синхр", "Десинхр")

REPLICATE REPLICATE (str, i)

Повторяет i раз строку str.

Вернет "aBaBaBaBaB" SELECT REPLICATE("aB", 5)

REVERSE REVERSE (str)

Выводит строку str в обратном порядке.

Вернет "яицазинорхниС" SELECT REVERSE("Синхронизация")

SOUNDEX SOUNDEX (str)

Возвращает четырехсимвольный код soundex, используемый для определения похожести двух строк. Работает только для символов ASCII.

SPACE SPACE (length)

Возвращает строку пробелов длиной, указанной в параметре length. Аналог REPLICATE(" ", length).

STR STR (f[, len[, d]])

Преобразовывает заданное выражение с плавающей точкой f в строку, где len - длина строки, включая десятичную точку, знак, цифры и пробелы (по умолчанию равно 10), а d - число разрядов дробной части, которые нужно возвратить.

Вернет "3.14" SELECT STR (3.1415, 4, 2)

STUFF STUFF (str1, a, length, str2)

Удаляет из строки str1 length-символов, начиная с позиции a, и вставляет на их место строку str2.

Note in a book SELECT STUFF("Notebook", 5, 0," in a ") -- Handbook SELECT STUFF("Notebook", 1, 4, "Hand")

SUBSTRING SUBSTRING (str1, a, length)

Извлекает из строки str, начиная с позиции a, подстроку длиной length.

Системные функции

Системные функции языка Transact-SQL предоставляют обширную информацию об объектах базы данных. Большинство системных функций использует внутренний числовой идентификатор (ID), который присваивается каждому объекту базы данных при его создании. Посредством этого идентификатора система может однозначно идентифицировать каждый объект базы данных.

В следующей таблице приводятся некоторые из наиболее важных системных функций вместе с их кратким описанием:

Системные функции Transact-SQL
Функция Синтаксис Описание Пример использования
CAST CAST (w AS type [(length)]

Преобразовывает выражение w в указанный тип данных type (если это возможно). Аргумент w может быть любым действительным выражением.

Вернет 3 SELECT CAST (3.1258 AS INT)

COALESCE COALESCE (a1, a2)

Возвращает первое значение выражения из списка выражений a1, a2, ..., которое не является значением null.

COL_LENGTH COL_LENGTH (obj, col)

Возвращает длину столбца col объекта базы данных (таблицы или представления) obj.

Вернет 4 SELECT COL_LENGTH ("Employee", "Id")

CONVERT CONVERT (type[(length)], w)

Эквивалент функции CAST, но аргументы указываются по-иному. Может применяться с любым типом данных.

CURRENT_TIMESTAMP CURRENT_TIMESTAMP

Возвращает текущие дату и время.

CURRENT_USER CURRENT_USER

Возвращает имя текущего пользователя.

DATALENGTH DATALENGTH (z)

Возвращает число байтов, которые занимает выражение z.

Этот запрос возвращает длину каждого поля SELECT DATALENGTH(FirstName) FROM Employee

GETANSINULL GETANSINULL ("dbname")

Возвращает 1, если использование значений null в базе данных dbname отвечает требованиям стандарта ANSI SQL.

ISNULL ISNULL (expr, value)

Возвращает значение выражения expr, если оно не равно NULL; в противном случае возвращается значение value.

ISNUMERIC ISNUMERIC (expr)

Определяет, имеет ли выражение expr действительный числовой тип.

NEWID NEWID()

Создает однозначный идентификационный номер ID, состоящий из 16-байтовой двоичной строки, предназначенной для хранения значений типа данных UNIQUEIDENTIFIER.

NEWSEQUENTIALID NEWSEQUENTIALID()

Создает идентификатор GUID, больший, чем любой другой идентификатор GUID, созданный ранее этой функцией на указанном компьютере. (Эту функцию можно использовать только как значение по умолчанию для столбца.)

NULLIF NULLIF (expr1, expr2)

Возвращает значение null, если значения выражений expr1 и expr2 одинаковые.

Запрос возвращает NULL для проекта, -- у которого Number = "p1" SELECT NULLIF(Number, "p1") FROM Project

SERVERPROPERTY SERVERPROPERTY (propertyname)

Возвращает информацию о свойствах сервера базы данных.

SYSTEM_USER SYSTEM_USER

Возвращает ID текущего пользователя.

USER_ID USER_ID ()

Возвращает идентификатор пользователя username. Если пользователь не указан, то возвращается идентификатор текущего пользователя.

USER_NAME USER_NAME ()

Возвращает имя пользователя с указанным идентификатором id. Если идентификатор не указан, то возвращается имя текущего пользователя.

Функции метаданных

По большому счету, функции метаданных возвращают информацию об указанной базе данных и объектах базы данных. В таблице ниже приводятся некоторые из наиболее важных функций метаданных вместе с их кратким описанием:

Функции метаданных Transact-SQL
Функция Синтаксис Описание Пример использования
COL_NAME COL_NAME (tab_id, col_id)

Возвращает имя столбца с указанным идентификатором col_id таблицы с идентификатором tab_id.

Вернет имя столбца "LastName" SELECT COL_NAME (OBJECT_ID("Employee"), 3)

COLUMNPROPERTY COLUMNPROPERTY (id, col, property)

Возвращает информацию об указанном столбце.

Вернет значение свойства PRECISION -- для столбца Id таблицы Employee SELECT COLUMNPROPERTY (OBJECT_ID("Employee"), "Id", "precision")

DATABASEPROPERTY DATABASEPROPERTY (database, property)

Возвращает значение свойства property базы данных database.

Вернет значение свойства IsNullConcat -- для базы данных SampleDb SELECT DATABASEPROPERTY ("SampleDb", "IsNullConcat")

DB_ID DB_ID ()

Возвращает идентификатор базы данных db_name. Если имя базы данных не указано, то возвращается идентификатор текущей базы данных.

DB_NAME DB_NAME ()

Возвращает имя базы данных, имеющей идентификатор db_id. Если идентификатор не указан, то возвращается имя текущей базы данных.

INDEX_COL INDEX_COL (table, i, no)

Возвращает имя индексированного столбца таблицы table. Столбец указывается идентификатором индекса i и позицией no столбца в этом индексе.

INDEXPROPERTY INDEXPROPERTY (obj_id, index_name, property)

Возвращает свойства именованного индекса или статистики для указанного идентификационного номера таблицы, имя индекса или статистики, а также имя свойства.

OBJECT_NAME OBJECT_NAME (obj_id)

Возвращает имя объекта базы данных, имеющего идентификатор obj_id.

SELECT OBJECT_NAME(245575913);

OBJECT_ID OBJECT_ID (obj_name)

Возвращает идентификатор объекта obj_name базы данных.

Вернет 245575913 - ID таблицы Employee SELECT OBJECT_ID("Employee")

OBJECTPROPERTY OBJECTPROPERTY (obj_id, property)

Возвращает информацию об объектах из текущей базы данных.