Как записывать дату в sql
Пожалуйста, выделяйте текст программы тегом [сode=pas] . [/сode] . Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля. Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO
Модераторы: Bas, Rouse_
‘> SQL INSERT добавить дату
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
Сообщ. #1 , 21.03.07, 10:26
Senior Member
Рейтинг (т): нет
как надо в sql-запросе, в функции INSERT добавлять дату? т.е.
INSERT INTO Base.DB (Name, Date) VALUES («1», как здесь дату писать?)
в пункте Date содержится дата..
Сообщение отредактировано: Dmitry_177 — 21.03.07, 10:28
Сообщ. #2 , 21.03.07, 10:32
Рейтинг (т): 105
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO
Изучаем MySQL: работа с датами и временем
В этой статье мы рассмотрим основы работы с датой и временем в MySQL.
Формат даты и времени
MySQL date format поддерживает несколько форматов даты и времени. Их можно определить следующим образом:
DATE — хранит значение даты в виде ГГГГ-ММ-ДД. Например, 2008-10-23.
DATETIME — хранит значение даты и времени в виде ГГГГ-MM-ДД ЧЧ:ММ:СС. Например, 2008-10-23 10:37:22. Поддерживаемый диапазон дат и времени: 1000-01-01 00:00:00 до 9999-12-31 23:59:59
TIMESTAMP — похож на DATETIME с некоторыми различиями в зависимости от версии MySQL и режима, в котором работает сервер.
Создание полей даты и времени
Таблица, содержащая типы данных DATE и DATETIME , создается так же, как и другие столбцы. Например, мы можем создать новую таблицу под названием orders, которая содержит столбцы номера заказа, заказанного товара, даты заказа и даты доставки заказа:
CREATE TABLE `MySampleDB`.`orders` ( `order_no` INT NOT NULL AUTO_INCREMENT, `order_item` TEXT NOT NULL, `order_date` DATETIME NOT NULL, `order_delivery` DATE NOT NULL, PRIMARY KEY (`order_no`) ) ENGINE = InnoDB;
Столбец ORDER_DATE — это поле типа MySQL DATE TIME , в которое мы записываем дату и время, когда был сделан заказ. Для даты доставки невозможно предсказать точное время, поэтому мы записываем только дату.
Форматы даты и времени
Наиболее часто используемым разделителем для дат является тире ( — ), а для времени — двоеточие ( : ). Но мы можем использовать любой символ, или вообще не добавлять никакого символа.
Например, все следующие форматы являются правильными:
2008-10-23 10:37:22 20081023103722 2008/10/23 10.37.22 2008*10*23*10*37*22
Функции даты и времени
MySQL содержит множество функций, которые используются для обработки даты и времени. В приведенной ниже таблице представлен список наиболее часто используемых функций:
| Функция | Описание |
| ADDDATE() | Добавляет дату. |
| ADDTIME() | Добавляет время. |
| CONVERT_TZ() | Конвертирует из одного часового пояса в другой. |
| CURDATE() | Возвращает текущую дату. |
| CURTIME() | Возвращает текущее системное время. |
| DATE_ADD() | Добавляет одну дату к другой. |
| DATE_FORMAT() | Задает указанный формат даты. |
| DATE() | Извлекает часть даты из даты или выражения дата-время. |
| DATEDIFF() | Вычитает одну дату из другой. |
| DAYNAME() | Возвращает день недели. |
| DAYOFMONTH() | Возвращает день месяца (1-31). |
| DAYOFWEEK() | Возвращает индекс дня недели из аргумента. |
| DAYOFYEAR() | Возвращает день года (1-366). |
| EXTRACT() | Извлекает часть даты. |
| FROM_DAYS() | Преобразует номер дня в дату. |
| FROM_UNIXTIME() | Задает формат даты в формате UNIX. |
| DATE_SUB() | Вычитает одну дату из другой. |
| HOUR() | Извлекает час. |
| LAST_DAY() | Возвращает последний день месяца для аргумента. |
| MAKEDATE() | Создает дату из года и дня года. |
| MAKETIME() | Возвращает значение времени. |
| MICROSECOND() | Возвращает миллисекунды из аргумента. |
| MINUTE() | Возвращает минуты из аргумента. |
| MONTH() | Возвращает месяц из переданной даты. |
| MONTHNAME() | Возвращает название месяца. |
| NOW() | Возвращает текущую дату и время. |
| PERIOD_ADD() | Добавляет интервал к месяцу-году. |
| PERIOD_DIFF() | Возвращает количество месяцев между двумя периодами. |
| QUARTER() | Возвращает четверть часа из переданной даты в качестве аргумента. |
| SEC_TO_TIME() | Конвертирует секунды в формат ‘ЧЧ:MM:СС’. |
| SECOND() | Возвращает секунду (0-59). |
| STR_TO_DATE() | Преобразует строку в дату. |
| SUBTIME() | Вычитает время. |
| SYSDATE() | Возвращает время, в которое была выполнена функция. |
| TIME_FORMAT() | Задает формат времени. |
| TIME_TO_SEC() | Возвращает аргумент, преобразованный в секунды. |
| TIME() | Выбирает часть времени из выражения, передаваемого в качестве аргумента. |
| TIMEDIFF() | Вычитает время. |
| TIMESTAMP() | С одним аргументом эта функция возвращает дату или выражение дата-время. С двумя аргументами возвращается сумма аргументов. |
| TIMESTAMPADD() | Добавляет интервал к дате-времени. |
| TIMESTAMPDIFF() | Вычитает интервал из даты — времени. |
| TO_DAYS() | Возвращает аргумент даты, преобразованный в дни. |
| UNIX_TIMESTAMP() | Извлекает дату-время в формате UNIX в формат, принимаемый MySQL. |
| UTC_DATE() | Возвращает текущую дату по универсальному времени (UTC). |
| UTC_TIME() | Возвращает текущее время по универсальному времени (UTC). |
| UTC_TIMESTAMP() | Возвращает текущую дату-время по универсальному времени (UTC). |
| WEEK() | Возвращает номер недели. |
| WEEKDAY() | Возвращает индекс дня недели. |
| WEEKOFYEAR() | Возвращает календарную неделю даты (1-53). |
| YEAR() | Возвращает год. |
| YEARWEEK() | Возвращает год и неделю. |
Вы можете поэкспериментировать с этими функциями MySQL date format , даже не занося никаких данных в таблицу. Например:
mysql> SELECT NOW(); +---------------------+ | NOW() | +---------------------+ | 2007-10-23 11:46:31 | +---------------------+ 1 row in set (0.00 sec)
Вы можете попробовать сочетание нескольких функций в одном запросе (например, чтобы найти день недели):
mysql> SELECT MONTHNAME(NOW()); +------------------+ | MONTHNAME(NOW()) | +------------------+ | October | +------------------+ 1 row in set (0.00 sec)
Внесение значений даты и времени в столбцы таблицы
Рассмотрим, как вносятся значения date MySQL в таблицу. Чтобы продемонстрировать это, мы продолжим использовать таблицу orders , которую создали в начале статьи.
Мы начнем с добавления новой строки заказа. Значение поля order_no будет автоматически увеличиваться на 1, так что нам остается вставить значения order_item , дату создания заказа и дату доставки. Дата заказа — это время, в которое вставляется заказ, поэтому мы можем использовать функцию NOW() , чтобы внести в строку текущую дату и время.
Дата доставки — это период времени после даты заказа, которую мы можем вернуть, используя функцию MySQL DATE ADD() , которая принимает в качестве аргументов дату начала ( в нашем случае NOW () ) и INTERVAL ( в нашем случае 14 дней ). Например:
INSERT INTO orders (order_item, order_date, order_delivery) VALUES ('iPhone 8Gb', NOW(), DATE_ADD(NOW(), INTERVAL 14 DAY));
Данный запрос создает заказ для указанного элемента с датой, временем выполнения заказа, и интервалом через две недели после этого в качестве даты доставки:
mysql> SELECT * FROM orders; +----------+------------+---------------------+----------------+ | order_no | order_item | order_date | order_delivery | +----------+------------+---------------------+----------------+ | 1 | iPhone 8Gb | 2007-10-23 11:37:55 | 2007-11-06 | +----------+------------+---------------------+----------------+ 1 row in set (0.00 sec)
Точно так же можно заказать товар с датой доставки через два месяца:
mysql> INSERT INTO orders (order_item, order_date, order_delivery) VALUES ('ipod Touch 4Gb', NOW(), DATE_ADD(NOW(), INTERVAL 2 MONTH)); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM orders; +----------+----------------+---------------------+----------------+ | order_no | order_item | order_date | order_delivery | +----------+----------------+---------------------+----------------+ | 1 | iPhone 8Gb | 2007-10-23 11:37:55 | 2007-11-06 | | 2 | ipod Touch 4Gb | 2007-10-23 11:51:09 | 2007-12-23 | +----------+----------------+---------------------+----------------+ 2 rows in set (0.00 sec)
Извлечение данных по дате и времени
В MySQL мы можем отфильтровать извлеченные данные в зависимости от даты и времени. Например, мы можем извлечь только те заказы, доставка которых запланирована на ноябрь:
mysql> SELECT * FROM orders WHERE MONTHNAME(order_delivery) = 'November'; +----------+------------+---------------------+----------------+ | order_no | order_item | order_date | order_delivery | +----------+------------+---------------------+----------------+ | 1 | iPhone 8Gb | 2007-10-23 11:37:55 | 2007-11-06 | +----------+------------+---------------------+----------------+ 1 row in set (0.00 sec)
Точно так же мы можем использовать BETWEEN , чтобы выбрать товары, доставка которых произойдет между двумя указанными датами. Например:
mysql> SELECT * FROM orders WHERE order_delivery BETWEEN '2007-12-01' AND '2008-01-01'; +----------+----------------+---------------------+----------------+ | order_no | order_item | order_date | order_delivery | +----------+----------------+---------------------+----------------+ | 2 | ipod Touch 4Gb | 2007-10-23 11:51:09 | 2007-12-23 | +----------+----------------+---------------------+----------------+ 1 row in set (0.03 sec)
Заключение
В этой статье мы рассмотрели форматы, используемые для определения даты и времени, и перечислили функции, используемые в для операций в MySQL с тип DATE . А также несколько примеров внесения и извлечения данных.
Типы данных и функции даты и времени (Transact-SQL)
В разделах этой статьи представлен обзор всех типов данных и функций даты и времени Transact-SQL.
- Типы данных даты и времени
- Функции даты и времени
- Функции, возвращающие значения системной даты и времени
- Функции, возвращающие компоненты даты и времени
- Функции, возвращающие значения даты и времени из их компонентов
- Функции, возвращающие значения разности даты и времени
- Функции, изменяющие значения даты и времени
- Функции, устанавливающие или возвращающие функции формата сеанса
- Функции, проверяющие значения даты и времени
Типы данных даты и времени
Типы данных даты и времени Transact-SQL перечислены в следующей таблице:
Тип данных Формат Диапазон Точность Объем памяти (в байтах) Определяемая пользователем точность в долях секунды Смещение часового пояса time чч:мм:сс[.ннннннн] От 00:00:00.0000000 до 23:59:59.9999999 100 наносекунд от 3 до 5 Да Нет date ГГГГ-ММ-ДД От 0001-01-01 до 31.12.99 1 день 3 Нет Нет smalldatetime ГГГГ-ММ-ДД чч:мм:сс От 01.01.1900 до 06.06.2079 1 минута 4 нет Нет datetime ГГГГ-ММ-ДД чч:мм:сс[.ннн] От 01.01.1753 до 31.12.9999 0,00333 секунды 8 Нет Нет datetime2 ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 100 наносекунд От 6 до 8 Да Нет datetimeoffset ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] [+|-]чч:мм От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 (время в формате UTC) 100 наносекунд От 8 до 10 Да Да Тип данных Transact-SQL rowversion не относится к типам данных даты и времени. Тип данных timestamp является устаревшим синонимом rowversion.
Функции даты и времени
В следующих таблицах приводятся функции даты и времени Transact-SQL. Дополнительные сведения о детерминизме см. в статье Детерминированные и недетерминированные функции.
Функции, возвращающие значения системной даты и времени
Transact-SQL наследует все значения системной даты и времени от операционной системы компьютера, на котором работает экземпляр SQL Server.
Высокоточные функции системной даты и времени
Начиная с SQL Server 2008 (10.0.x) ядро СУБД получает значения даты и времени с помощью API Windows GetSystemTimeAsFileTime(). Точность зависит от физического оборудования и версии Windows, в которой запущен экземпляр SQL Server. Точность возвращаемых значений этого API-интерфейса задана равной 100 нс. Точность может быть определена с помощью метода GetSystemTimeAdjustment() API-интерфейса Windows.
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм SYSDATETIME SYSDATETIME ( ) Возвращает значение типа datetime2(7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение не содержит смещение часового пояса. datetime2(7) Недетерминированная SYSDATETIMEOFFSET SYSDATETIMEOFFSET ( ) Возвращает значение типа datetimeoffset(7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение содержит смещение часового пояса. datetimeoffset(7) Недетерминированная SYSUTCDATETIME SYSUTCDATETIME ( ) Возвращает значение типа datetime2(7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Функция возвращает значения даты и времени в формате UTC. datetime2(7) Недетерминированная Функции системной даты и времени меньшей точности
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм CURRENT_TIMESTAMP CURRENT_TIMESTAMP Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение не содержит смещение часового пояса. datetime Недетерминированная GETDATE GETDATE ( ) Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение не содержит смещение часового пояса. datetime Недетерминированная GETUTCDATE GETUTCDATE ( ) Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Функция возвращает значения даты и времени в формате UTC. datetime Недетерминированная Функции, возвращающие компоненты даты и времени
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм DATE_BUCKET DATE_BUCKET ( datepart, number, date, origin ) Возвращает значение даты и времени, соответствующее началу каждого контейнера даты и времени, из временной метки, определенной параметром origin или исходным значением по умолчанию 1900-01-01 00:00:00.000 , если параметр orgin не указан. Тип возвращаемого значения зависит от типа аргумента, переданного в параметре date. Недетерминированная DATENAME DATENAME ( datepart, date ) Возвращает строку символов, представляющую указанную часть datepart заданного типа date. nvarchar Недетерминированная DATEPART DATEPART ( datepart, date ) Возвращает целое число, представляющее указанную часть datepart заданного типа date. int Недетерминированная DATETRUNC DATETRUNC ( datepart, date ) Эта функция возвращает входную дату date, усеченную до указанной части datepart. Тип возвращаемого значения зависит от типа аргумента, переданного в параметре date. Недетерминированная DAY DAY ( date ) Возвращает целое число, представляющее часть дня указанного типа date. int Детерминированный MONTH MONTH ( date ) Возвращает целое число, представляющее часть месяца указанного типа date. int Детерминированный YEAR YEAR ( date ) Возвращает целое число, представляющее часть года указанного типа date. int Детерминированный Функции, возвращающие значения даты и времени из их компонентов
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм DATEFROMPARTS DATEFROMPARTS ( year, month, day ) Возвращает значение date, соответствующее указанному числу, месяцу и году. date Детерминированный DATETIME2FROMPARTS DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision) Возвращает значение datetime2, соответствующее указанной дате и времени с заданной точностью. datetime2(precision) Детерминированный DATETIMEFROMPARTS DATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds) Возвращает значение datetime, соответствующее указанной дате и времени. datetime Детерминированный DATETIMEOFFSETFROMPARTS DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision) Возвращает значение datetimeoffset для указанных даты и времени с указанными смещением и точностью. datetimeoffset(precision) Детерминированный SMALLDATETIMEFROMPARTS SMALLDATETIMEFROMPARTS ( year, month, day, hour, minute ) Возвращает значение smalldatetime, соответствующее указанной дате и времени. smalldatetime Детерминированный TIMEFROMPARTS TIMEFROMPARTS ( hour, minute, seconds, fractions, precision ) Возвращает значение time, соответствующее указанному времени с заданной точностью. time(precision) Детерминированный Функции, возвращающие значения разности даты и времени
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм DATEDIFF DATEDIFF ( datepart, startdate, enddate ) Возвращает количество границ даты или времени datepart, пересекающихся между двумя указанными датами. int Детерминированный DATEDIFF_BIG DATEDIFF_BIG ( datepart, startdate, enddate ) Возвращает количество границ даты или времени datepart, пересекающихся между двумя указанными датами. bigint Детерминированный Функции, изменяющие значения даты и времени
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм DATEADD DATEADD (datepart, number, date ) Возвращает новое значение datetime, добавляя интервал к указанной части datepart заданной даты date. Тип данных аргумента date Детерминированный EOMONTH EOMONTH ( start_date [, month_to_add ] ) Возвращает последний день месяца, содержащего указанную дату, с необязательным смещением. Тип возвращаемого значения — это тип аргумента start_date или тип данных date. Детерминированный SWITCHOFFSET SWITCHOFFSET (DATETIMEOFFSET, time_zone) Функция SWITCHOFFSET изменяет смещение часового пояса для значения DATETIMEOFFSET и сохраняет значение UTC. Значение datetimeoffset с точностью в долях секунд, заданной в аргументе DATETIMEOFFSET Детерминированный TODATETIMEOFFSET TODATETIMEOFFSET (expression, time_zone) TODATETIMEOFFSET преобразует значение типа datetime2 в значение типа datetimeoffset. Функция TODATETIMEOFFSET преобразует значение datetime2 в местное время для указанного time_zone. Значение datetimeoffset с точностью в долях секунд, заданной в аргументе datetime Детерминированный Функции, устанавливающие или возвращающие функции формата сеанса
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм @@DATEFIRST @@DATEFIRST Возвращает текущее значение параметра SET DATEFIRST для сеанса. tinyint Недетерминированная SET DATEFIRST SET DATEFIRST < number | @number_var > Устанавливает первый день недели в виде числа от 1 до 7. Неприменимо Неприменимо SET DATEFORMAT SET DATEFORMAT < format | @format_var > Задает порядок составляющих даты (месяц/день/год) для ввода данных типа datetime или smalldatetime. Неприменимо Неприменимо @@LANGUAGE @@LANGUAGE Возвращает название использующегося в настоящий момент языка. @@LANGUAGE не является функцией даты или времени. Однако на данные, выводимые функциями даты, могут повлиять настройки языка. Неприменимо Неприменимо SET LANGUAGE SET LANGUAGE < [ N ] ‘language‘ | @language_var > Устанавливает языковую среду сеанса и системных сообщений. SET LANGUAGE не является функцией даты или времени. Однако на данные, выводимые функциями даты, влияет параметр языка. Неприменимо Неприменимо sp_helplanguage sp_helplanguage [ [ = ] ‘language‘ ] Возвращает сведения о формате даты всех поддерживаемых языков. sp_helplanguage не является хранимой процедурой даты или времени. Однако на данные, выводимые функциями даты, влияет параметр языка. Неприменимо Неприменимо Функции, проверяющие значения даты и времени
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм ISDATE ISDATE ( expression ) Определяет, является ли входное выражение типа datetime или smalldatetime допустимым значением даты или времени. int Функция ISDATE детерминирована, только если используется совместно с функцией CONVERT и если заданный параметр стиля CONVERT не равен 0, 100, 9 или 109. Дата и время — см. также
Статья Описание FORMAT Возвращает значение в указанных формате и культуре (не обязательно). Для выполнения форматирования значения даты, времени и чисел с учетом локали в виде строк используется функция FORMAT. Функции CAST и CONVERT (Transact-SQL) Предоставляет сведения о преобразовании значений даты и времени в строковые литералы и обратно, а также в другие форматы даты и времени. Написание инструкций Transact-SQL, адаптированных к международному использованию Предоставляет рекомендации относительно переносимости баз данных и приложений баз данных, использующих инструкции Transact-SQL, с одного языка на другой или в многоязычную среду. Скалярные функции ODBC (Transact-SQL) Предоставляет сведения о скалярных функциях ODBC, которые могут использоваться в инструкциях Transact-SQL. К ним относятся функции даты и времени ODBC. AT TIME ZONE (Transact-SQL) Обеспечивает преобразование часовых поясов. См. также
- Функции
- Типы данных (Transact-SQL)
date (Transact-SQL)
Определяет дату в SQL Server. Тип данных даты появился в SQL Server 2008 (10.0.x).
Описание типа данных date
Свойство Значение Синтаксис DATE Использование DECLARE @MyDate DATE MM — это две цифры от 01 12 того, что представляет месяц в указанном году.
Поддерживаемые форматы строковых литералов для типа данных date
В приведенной ниже таблице перечислены допустимые форматы строковых литералов для типа данных date.
Поддерживаются только четыре цифры или двухзначные годы. Для записи года рекомендуется всегда использовать четырехзначный формат. Чтобы указать целое число от 0001 9999 того, что представляет отрезок года для интерпретации двухзначных лет в качестве четырехзначных лет, используйте параметр конфигурации сервера отсечения двухзначного года.
Примечание. Для Informatica ограничено yyyy диапазоном 1582 9999 .
Если двузначное число, обозначающее год, меньше или равно двузначному числу из последних двух цифр порогового года, год относится к тому же столетию, что и пороговый год. Если двузначное число, обозначающее год, больше двузначного числа из последних двух цифр порогового года, год относится к столетию, которое предшествует столетию порогового года. Например, если двухзначный отрезок года является стандартным 2049 , двухзначный год 49 интерпретируется как 2049 и двухзначный год 50 интерпретируется как 1950 .
Текущий языковой параметр определяет формат даты по умолчанию. Формат даты можно изменить с помощью инструкций SET LANGUAGE и SET DATEFORMAT.
Во избежание неоднозначности используйте четырехзначную запись года.
TZD — это конструктор часового пояса ( Z или -hh:mm +hh:mm ):
Соответствие стандартам ANSI и ISO 8601
Значение date соответствует стандартному определению ANSI SQL для григорианского календаря:
ПРИМЕЧАНИЕ 85. Типы данных Datetime позволяют хранить даты в григорианском формате в диапазоне дат 0001-01-01 CE до 9999-12-31 CE.
Формат строкового литерала по умолчанию, используемый для клиентов нижнего уровня, соответствует стандартной форме SQL, определенной как yyyy-MM-dd . Этот формат совпадает с определением ISO 8601 для DATE .
Для Informatica диапазон ограничен 1582-10-15 (15 октября 1582 CE) до 9999-12-31 (31 декабря 9999 CE).
Обратная совместимость для клиентов нижнего уровня
Некоторые клиенты нижнего уровня не поддерживают типы данных time, date, datetime2 и datetimeoffset. В следующей таблице показано сопоставление типов между экземпляром SQL Server и клиентами нижнего уровня.
Тип данных SQL Server Формат строкового литерала по умолчанию, передаваемый клиенту низкого уровня ODBC низкого уровня OLEDB низкого уровня JDBC низкого уровня SQLCLIENT низкого уровня time hh:mm:ss[.nnnnnnn] SQL_WVARCHAR или SQL_VARCHAR DBTYPE_WSTR или DBTYPE_STR Java.sql.String String или SqString date yyyy-MM-dd SQL_WVARCHAR или SQL_VARCHAR DBTYPE_WSTR или DBTYPE_STR Java.sql.String String или SqString datetime2 yyyy-MM-dd HH:mm:ss[.nnnnnnn] SQL_WVARCHAR или SQL_VARCHAR DBTYPE_WSTR или DBTYPE_STR Java.sql.String String или SqString datetimeoffset yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm SQL_WVARCHAR или SQL_VARCHAR DBTYPE_WSTR или DBTYPE_STR Java.sql.String String или SqString Преобразование данных даты и времени
При преобразовании в типы данных даты и времени SQL Server отклоняет все значения, которые не распознаются как даты или время. Сведения об использовании и CONVERT функциях с данными CAST даты и времени см. в статье CAST и CONVERT (Transact-SQL).
Преобразование даты в другие типы дат и времени
В этом разделе описывается, что происходит при преобразовании типа данных date в другие типы даты и времени.
При преобразовании в time(n)преобразование завершается ошибкой и возникает сообщение об ошибке 206:
Столкновение типов операнда: дата несовместима с временем.
Если преобразование равно datetime, компонент даты копируется. В следующем коде показаны результаты преобразования значения даты в значение datetime .
DECLARE @date DATE = '12-10-25'; DECLARE @datetime DATETIME = @date; SELECT @date AS '@date', @datetime AS '@datetime';@date @datetime ---------- ----------------------- 2025-12-10 2025-12-10 00:00:00.000При преобразовании в smalldatetime значение даты находится в диапазоне smalldatetime, компонент даты копируется, а для компонента времени задано значение . 00:00:00.000 Если значение даты выходит за пределы диапазона значения smalldatetime, возникает сообщение об ошибке 242, а значение smalldatetime имеет NULL значение :
Преобразование типа данных даты в типы данных smalldatetime привело к значению вне диапазона.
В следующем коде показаны результаты преобразования значения даты в значение smalldatetime .
DECLARE @date DATE = '1912-10-25'; DECLARE @smalldatetime SMALLDATETIME = @date; SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';@date @smalldatetime ---------- ------------------- 1912-10-25 1912-10-25 00:00:00Для преобразования в datetimeoffset(n)дата копируется, а время — 00:00.0000000 +00:00 . В следующем коде показаны результаты преобразования значения даты в значение datetimeoffset(3).
DECLARE @date DATE = '1912-10-25'; DECLARE @datetimeoffset DATETIMEOFFSET(3) = @date; SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';@date @datetimeoffset ---------- ------------------------------ 1912-10-25 1912-10-25 00:00:00.000 +00:00При преобразовании в datetime2(n)компонент даты копируется, а для компонента времени задано значение 00:00.000000 . В следующем коде показаны результаты преобразования значения даты в значение datetime2(3).
DECLARE @date DATE = '1912-10-25' DECLARE @datetime2 DATETIME2(3) = @date; SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';@date @datetime2(3) ---------- ----------------------- 1912-10-25 1912-10-25 00:00:00.000Преобразование строковых литерала в дату
Преобразование строковых литералов в типы данных даты и времени разрешается, если все части строк записаны в допустимом формате. Иначе возникает ошибка времени выполнения. Неявные преобразования или явные преобразования, не указывающие стиль, от типов даты и времени до строковых литералов, находятся в формате по умолчанию текущего сеанса. В таблице ниже приводятся правила преобразования строковых литералов в тип данных date.
Строковый литерал входа Дата ODBC DATE Строковые литералы ODBC сопоставляются с типом данных datetime. Любая операция присваивания литералов ODBC DATETIME типу данных date вызывает неявное преобразование между данным типом и типом datetime согласно правилам преобразования. ODBC TIME См. предыдущее правило ODBC DATE. ODBC DATETIME См. предыдущее правило ODBC DATE. только DATE Простейший. только TIME Указаны значения по умолчанию. только TIMEZONE Указаны значения по умолчанию. DATE + TIME Используется компонент DATE входной строки. DATE + TIMEZONE Запрещено. TIME + TIMEZONE Указаны значения по умолчанию. DATE + TIME + TIMEZONE Используется часть DATE локального DATETIME. Примеры
В приведенном ниже примере сравниваются результаты приведения строкового типа к каждому из типов данных date и time.
SELECT CAST('2022-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time', CAST('2022-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date', CAST('2022-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime', CAST('2022-05-08 12:35:29.123' AS DATETIME) AS 'datetime', CAST('2022-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2', CAST('2022-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';Тип данных Выходные данные time 12:35:29.1234567 date 2022-05-08 smalldatetime 2022-05-08 12:35:00 datetime 2022-05-08 12:35:29.123 datetime2 2022-05-08 12:35:29.1234567 datetimeoffset 2022-05-08 12:35:29.1234567 +12:15 См. также
