Функция DATEFROMPARTS
Функция DATEFROMPARTS появилась в SQL Server версии 2012.
У функции DATEFROMPARTS 3 целочисленных аргумента, представляющих собой год, месяц и день, а возвращаемое значение есть соответствующая дата типа DATE. Она даёт удобный способ формирования даты, когда её компоненты хранятся отдельно или передаются с клиента.
Например,
SELECT DATEFROMPARTS(2017, 5, 25);
[[ column ]] |
---|
NULL [[ value ]] |
вернёт
2017-05-25 |
Получить дату 25 числа текущего месяца можно так
select DATEFROMPARTS(YEAR(CURRENT_TIMESTAMP), MONTH(CURRENT_TIMESTAMP), 25);
[[ column ]] |
---|
NULL [[ value ]] |
Помимо даты можно “собирать” значения типа времени и временной метки (datetime), используя компоненты времени - часы, минуты, секунды и доли секунды. Например, следующий запрос
SELECT TIMEFROMPARTS(9, 38, 59, 998, 7);
[[ column ]] |
---|
NULL [[ value ]] |
09:38:59.0000998 |
Обратите внимание на последний параметр, который указывает на число знаков в представлении долей секунды. Этот целочисленный параметр может принимать значение от 0 до 7, но не может быть меньше числа цифр в представлении долей секунды.
Например,
SELECT TIMEFROMPARTS(9, 38, 59, 998, 3);
[[ column ]] |
---|
NULL [[ value ]] |
09:38:59.998 |
в то время как
SELECT TIMEFROMPARTS(9, 38, 59, 998, 2);
[[ column ]] |
---|
NULL [[ value ]] |
(Не удалось сконструировать тип данных time. Некоторые аргументы имеют недопустимые значения.)
Сравните с
SELECT TIMEFROMPARTS(9, 38, 59, 098, 2), TIMEFROMPARTS(9, 38, 59, 098, 3);
[[ column ]] |
---|
NULL [[ value ]] |
Результат
09:38:59.98 | 09:38:59.098 |
Функция DATETIMEFROMPARTS формирует значение типа DATETIME. Она имеет семь целочисленных параметров: год, месяц, день, часы, минуты, секунды, миллисекунды. При этом миллисекунды округляются с точностью до одного из значений: .000, .003, .007.
SELECT DATETIMEFROMPARTS(2017, 5, 13, 9, 38, 59, 998),
DATETIMEFROMPARTS(2017, 5, 13, 9, 38, 59, 999),
DATETIMEFROMPARTS(2017, 5, 13, 9, 38, 59, 993);
[[ column ]] |
---|
NULL [[ value ]] |
Результат
2017-05-13 09:38:59.997 | 2017-05-13 09:39:00.000 | 2017-05-13 09:38:59.993 |