Работа с датой и часовыми поясами в javascript

Default Format

The SQL Server uses the 24 Hours format to display the time.

1
2
3

yyyy-MM-dd hhmmss.nnnnnnn{+|-}hhmm

 

Where

  • represents the year
  • represents the month
  • represents the day
  •  represents the hour from 00 to 23
  •  represents the minute from 00 to 59
  •  is the second from 00 to 59
  •  is the fractional part of the seconds. No of the digits comes from the column definition . Also, note it does not use milliseconds
  • represents the time zone offset

Time zone offset

Time zone offset is the difference between the local time to UTC Time and is specified as

  •  is two digits that range from -14 to +14..
  •  is two digits that range from 00 to 59
  • +(plus) or -(minus) specifies whether the time zone offset is added or subtracted from the UTC time to return the local time.

The valid range of a time zone offset is -14:00 to +14:00

Table of contents

Learn SQL: CREATE DATABASE & CREATE TABLE Operations
Learn SQL: INSERT INTO TABLE
Learn SQL: Primary Key
Learn SQL: Foreign Key
Learn SQL: SELECT statement
Learn SQL: INNER JOIN vs LEFT JOIN
Learn SQL: SQL Scripts
Learn SQL: Types of relations
Learn SQL: Join multiple tables
Learn SQL: Aggregate Functions
Learn SQL: How to Write a Complex SELECT Query?
Learn SQL: The INFORMATION_SCHEMA Database
Learn SQL: SQL Data Types
Learn SQL: Set Theory
Learn SQL: User-Defined Functions
Learn SQL: User-Defined Stored Procedures
Learn SQL: SQL Views
Learn SQL: SQL Triggers
Learn SQL: Practice SQL Queries
Learn SQL: SQL Query examples
Learn SQL: Create a report manually using SQL queries
Learn SQL: SQL Server date and time functions
Learn SQL: Create SQL Server reports using date and time functions
Learn SQL: SQL Server Pivot Tables
Learn SQL: SQL Server export to Excel
Learn SQL: Intro to SQL Server loops
Learn SQL: SQL Server Cursors
Learn SQL: SQL Best Practices for Deleting and Updating data
Learn SQL: Naming Conventions
Learn SQL: SQL-Related Jobs
Learn SQL: Non-Equi Joins in SQL Server
Learn SQL: SQL Injection
Learn SQL: Dynamic SQL
Learn SQL: How to prevent SQL Injection attacks

Обратная совместимость для клиентов нижнего уровня

Некоторые клиенты нижнего уровня не поддерживают типы данных time, date, datetime2 и datetimeoffset. В следующей таблице показано сопоставление типов экземпляра более высокого уровня SQL Server и клиентов низкого уровня.

Тип данных SQL Server Формат строкового литерала по умолчанию, передаваемый клиенту низкого уровня ODBC низкого уровня OLEDB низкого уровня JDBC низкого уровня SQLCLIENT низкого уровня
time чч:мм:сс SQL_WVARCHAR или SQL_VARCHAR DBTYPE_WSTR или DBTYPE_STR Java.sql.String String или SqString
date ГГГГ-ММ-ДД SQL_WVARCHAR или SQL_VARCHAR DBTYPE_WSTR или DBTYPE_STR Java.sql.String String или SqString
datetime2 ГГГГ-ММ-ДД чч:мм:сс SQL_WVARCHAR или SQL_VARCHAR DBTYPE_WSTR или DBTYPE_STR Java.sql.String String или SqString
datetimeoffset ГГГГ-ММ-ДД чч:мм:сс чч:мм SQL_WVARCHAR или SQL_VARCHAR DBTYPE_WSTR или DBTYPE_STR Java.sql.String String или SqString

Дальнейшие Шаги

Единственную рекомендацию, которую я могу дать относительно деления системы на секции для преобразования следующая: необходимо предусмотреть достаточную изолированность модулей в соответствии с используемыми хранимками. Таким образом, вы добьетесь предсказуемости усилий и сможете их оценить заранее. Несомненно, какие-то проблемы все еще могут возникнуть, но они не будут расти, как снежный ком по мере работы. Позже вы сможете избавиться от старых полей. Информацию о тайм зоне можно брать из операционной системы или настроек пользователя. Ниже я разместил информацию о совместимости двух типов в БД.

  • Изменение типа столбца из DateTime в DateTimeOffset работает с неявным преобразованием. Смещение времени будет +00:00. Если нужно указать другой часовой пояс, необходимо использовать временный столбец.
  • Форматирование значений в строку поддержано.
  • Сравнение всеми операторами поддержано.
  • SYSDATETIMEOFFSET() без риска может заменить GETDATE()
  • Любое присвоение между DateTime и DateTimeOffset работает с неявным преобразованием.
Операция T-SQL Комментарий
Конвертация DateTime в DateTimeOffset TODATETIMEOFFSET(datetime_field, ‘+00:00’) Получите значение с добавленным смещением +00:00
Конвертация DateTimeOffset в DateTime CONVERT(DATETIME, datetimeoffset_field)
— or — SET @datetime = @datetimeoffset
Информация о смещении будет потеряна. При преобразовании смещение будет просто проигнорировано. Например, для ‘2017-04-05 10:02:00 +01:00’ получите ‘2017-04-05 10:02:00’.
Текущее дата/время SWITCHOFFSET(SYSDATETIMEOFFSET(), ‘+00:00’) Это две команды. Результатом будет точка в UTC зоне
Встроенные операции DATEPART, DATEDIFF, BETWEEN, <, >, =, etc. DATEDIFF, BETWEEN и операции сравнения учитывают временное смещение, при этом DateTime значение представляется, как значение со смещением UTC
Форматирование CONVERT(NVARCHAR, datetimeoffset_field, 103) Получите тот же результат что и для DateTime.

Очень интересно услышать истории о подобной трансформации от тех, кто уже проделывал такой в своих системах. А так же, кто и как поддерживает таймзоны в своих системах.

Inserting Values

The following insert query inserts the same Date to all the DateTimeOffset columns. We use the SYSDATETIMEOFFSET() to get the current datetime with time off set.

The output shows how the different DateTimeOffset columns stores the same date value differently.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

insert into testDateTimeOffset

(colDefault,col0,col1,col2,col3,col4,col5,col6,col7)

values(SYSDATETIMEOFFSET(),SYSDATETIMEOFFSET(),SYSDATETIMEOFFSET(),

SYSDATETIMEOFFSET(),SYSDATETIMEOFFSET(),SYSDATETIMEOFFSET(),

SYSDATETIMEOFFSET(),SYSDATETIMEOFFSET(),SYSDATETIMEOFFSET())

select*from testDateTimeOffset

 
 
———————————-

2020-12-20172012.5636531+0530

 
—————————

2020-12-20172013+0530

 
—————————-

2020-12-20172012.6+0530

 
——————————

2020-12-20172012.56+0530

 
——————————

2020-12-20172012.564+0530

 
——————————-

2020-12-20172012.5637+0530

 
———————————

2020-12-20172012.56365+0530

 
———————————

2020-12-20172012.563653+0530

 
———————————-

2020-12-20172012.5636531+0530

 

SQL DateTime data type considerations

Definition and storage overview

As explained above, this data type allows us to store dates from 01/01/1753 to 31/12/9999 and time information from 00:00:00.000 to 23:59:59.997. It’s internally represented as a 8 bytes value where first four bytes are used to represent the date part while last four are there for time part. So, we can see this representation as a floating-point value.

We could think that Microsoft stores date and time as two concatenated integer from a particular value. We could expect it’s not the case as that 3 milliseconds accuracy wouldn’t even exist as an the maximum value of an integer is 2 147 483 647, which is far bigger than the number of milliseconds in a day is 1000*60*60*24 = 86 400 000.

Anyway, the better way to know is to test and check. To do so, we will use CONVERT built-in function extensively.

Storage of the Date part of a SQL DateTime

First, we will check the way SQL Server stores the date part of a SQL DateTime.

Here is a sample result when running the following query. Instead of using GETDATE() function, I preferred taking a fixed value to be sure to run following statements and compare results.

1
2
3
4

DECLARE@dt DATETIME=’2017-05-01 15:09:26.128′

SELECT CONVERT(VARBINARY(8),@dt);

 

This statement will give you back a 0x0000A76600F9C8AE value.

If we take up only the date value, with following query :

1
2
3
4

DECLARE@dt DATETIME=’2017-05-01 15:09:26.128′

SELECT SUBSTRING(CONVERT(VARBINARY(8),@dt),1,4);

 

This query gives back the first 4 bytes of previous value: 0x0000A766. We deduct that 00F9C8AE is the time value for 15:09:26.128.

Now, what’s the corresponding integer value of the first four bytes?

1
2
3
4
5

DECLARE@b2i VARBINARY(8);

SET@b2i=0x0000A766;

SELECT CONVERT(INT,@b2i)

 

And the value is 42854. Would this possibly be the number of days since 01/01/1900?

1
2
3
4

DECLARE@dt DATETIME=’2017-05-01 15:09:26.128′

SELECT DATEDIFF(DAY,@dt,’1900-01-01 00:00:00.000′)

 

Running previous query will provide a YES answer.

There is one last question for this tour: does a 01/01/1900 value for a SQL DateTime really imply a value of 0 in its storage?

If we run following query, we will get back a value of 0x0000.

1
2
3
4

DECLARE@dt DATETIME=’1900-01-01 15:09:26.128′

SELECT SUBSTRING(CONVERT(VARBINARY(8),@dt),1,4);

 

Now, we can conclude that, actually, the date part of a DateTime is a signed integer from 01/01/1900.

Storage of the time part of a SQL DateTime

Now, we will consider how SQL Server handles the time part of a DateTime. We will modify the second query in previous subsection and proceed the same way.

1
2
3
4

DECLARE@dt DATETIME=’2017-05-01 15:09:26.128′

SELECT SUBSTRING(CONVERT(VARBINARY(8),@dt),5,4);

 

As expected, we get back following value: 0x00F9C8AE.

If we convert it to integer, what does it give?

1
2
3
4
5

DECLARE@b2i VARBINARY(8);

SET@b2i=0x00F9C8AE;

SELECT CONVERT(INT,@b2i)

 

It returns 16369838. Well this number does not seem to be the number of seconds since 00:00:00.000 as:

  • 15 hours = 540 000 000 ms
  • 9 minutes = 540 000 ms
  • 26 seconds = 26 000 ms
  • 128 milliseconds = 128 milliseconds
  • Total is : 54 566 128 milliseconds

If we divide the total above by 3.33, we will get a value near the one we got back from the last query. So, for an obscure reason, SQL Server « counts » by 3.33 milliseconds for DateTimes.

Conclusion

The first thing we want to do while working with databases is to store our real-world (business) data. In most
cases, they’ll contain date and time values. Still, we can also expect that we’ll need to store other date and time
values, e.g. when data had been inserted or updated. Working with SQL Server databases without using SQL Server date
and time functions is almost impossible. Therefore, store link to this article somewhere to remind yourself of these
functions (in case you’re stuck while working with dates & times).

In the upcoming article, we’ll use functions presented in this article to create report categories and reports. Stay tuned!

Time Formats

We can insert the time in the database columns in various formats

Format string Examples
hh:mm ’09:30:30′ ’09:31:57.999′ ’09:31:57.9002640′
hh:mm ’15:10:20:60′ ’09:31:57:999′
hhAM ’10:10AM’ ’10:10PM ’15PM’

Query Examples

1
2
3
4
5
6
7
8
9
10
11
12
13

insert into testTime(colTime)values(’15:10:20′)

insert into testTime(colTime)values(’15:10:20.150′)

insert into testTime(colTime)values(’15:10:20:15′)

insert into testTime(colTime)values(’10:10AM’)

insert into testTime(colTime)values(’10:10PM’)

insert into testTime(colTime)values(’10AM’)

 

Important Notes

  • An hour value of 24 is not valid.
  • Midnight is represented by either 12:00 AM or 00:00.
  • Noon is represented by either or
  • represents the hour after midnight for example ,
  • is not a valid time. PM cannot be specified when the hour equals 0.
  • Milliseconds can be preceded by either a colon (:) or a period (.). If a colon is used, the number means thousandths-of-a-second. If a period is used, a single-digit means tenths-of-a-second, two digits mean hundredths-of-a-second, and so forth.

Описание типа данных time

Property (Свойство) Значение
Синтаксис time
Использование DECLARE @MyTime time(7) CREATE TABLE Таблица1 ( Столбец1 time(7) )
fractional seconds scale Задает число знаков для долей секунды. Может быть целым числом от 0 до 7. Для Informatica может быть целым числом от 0 до 3. Длина дробной части по умолчанию равна 7 (100 нс).
Формат строковых литералов по умолчанию (используется для клиента нижнего уровня) чч:мм:сс для Informatica) Дополнительные сведения см. в разделе .
Диапазон От 00:00:00.0000000 до 23:59:59.9999999 (от 00:00:00.000 до 23:59:59.999 для Informatica)
Диапазоны элементов Обозначение чч состоит из двух цифр, представляющих час, и принимает значения от 0 до 23. Обозначение мм состоит из двух цифр, представляющих минуты, и принимает значения от 0 до 59. Обозначение сс состоит из двух цифр, представляющих секунды, и принимает значения от 0 до 59. Обозначение n* может содержать от нуля до семи цифр, представляющих доли секунды, и принимает значения от 0 до 9999999. Для Informatica обозначение n* может содержать от нуля до трех цифр и принимает значения от 0 до 999.
Длина в символах От 8 позиций (чч:мм:сс) до 16 позиций (чч:мм:сс.ннннннн). Для Informatica максимальная длина равна 12 (чч:мм:сс.ннн).
Точность, масштаб (только пользовательский масштаб) См. таблицу ниже.
Объем памяти 5 байт, по умолчанию используется фиксированная точность 100 нс. В Informatica размер по умолчанию — 4 байта; по умолчанию используется фиксированная точность 1 мс.
Точность 100 наносекунд (1 миллисекунда в Informatica)
Значение по умолчанию 00:00:00 Это значение используется как присоединяемая часть даты при неявном преобразовании данных типа date в значение типа datetime2 или datetimeoffset.
Определяемая пользователем точность в долях секунды Да
Учет и сохранение смещения часового пояса нет
Учет перехода на летнее время Нет
Указанный масштаб Результат (точность, масштаб) Длина столбца (в байтах) Дробная часть секунд точность
time (16,7) 5 (4 в Informatica) 7 (3 в Informatica)
time(0) (8,0) 3 0–2
time(1) (10,1) 3 0–2
time(2) (11,2) 3 0–2
time(3) (12,3) 4 3–4
time(4) Не поддерживается в Informatica. (13,4) 4 3–4
time(5) Не поддерживается в Informatica. (14,5) 5 5–7
time(6) Не поддерживается в Informatica. (15,6) 5 5–7
time(7) Не поддерживается в Informatica. (16,7) 5 5–7

Data model and some general thoughts

The data model we’ll use is the same one we’re using in this series. We won’t actually use any data from the tables.
I just want to point out that we’re using date and datetime data types in our model. Some of them are the result of
storing the real-life data (next_call_date), while others are generated automatically by the system when data is
inserted (ts_inserted). This shall usually be the case in most models as well.

We’ve mentioned that we’ll talk about SQL Server date and time functions. As their name says, they are functions and
they work the same way as user-defined functions work. You can read more about it in this article. If we would like to
explain this in the simplest possible manner, a function takes a number of parameters (could be none, 1 or more than
1) and returns the value. A function won’t have parameters only if it returns a system value (reading from a
predefined source). Some of these functions will transform date & time data types into integers or strings,
while others will do the opposite. Also, there will be format changes between different date and time data types.

Поддерживаемые форматы строковых литералов для типа данных datetime2

В таблицах ниже приводятся поддерживаемые форматы строковых литералов ISO 8601 и ODBC для типа данных datetime2. Сведения об алфавитных и числовых форматах, форматах строки без разделителей и форматах времени для частей даты и времени типа datetime2 см. в статьях date (Transact-SQL) и time (Transact-SQL).

ISO 8601 Описания
ГГГГ-ММ-ДДТчч:мм:сс ГГГГ-ММ-ДДТчч:мм:сс На этот формат не влияют настройки локали сеанса инструкций SET LANGUAGE и SET DATEFORMAT. Символы T, двоеточие (:) и точка (.) включаются в строковый литерал, например «2007-05-02T19:58:47.1234567».
ODBC Описание
{ ts ‘гггг-мм-дд чч:мм:сс’ } Зависит от API-интерфейса ODBC. Можно указать от 0 до 7 знаков (100 наносекунд) справа от десятичной запятой, представляющих доли секунды.

Примеры

A. Сравнение типов данных даты и времени

В приведенном ниже примере сравниваются результаты приведения строкового типа к каждому из типов данных date и time.

Тип данных Выходные данные
time 12:35:29. 1234567
date 2007-05-08
smalldatetime 2007-05-08 12:35:00
datetime 2007-05-08 12:35:29.123
datetime2 2007-05-08 12:35:29. 1234567
datetimeoffset 2007-05-08 12:35:29.1234567 +12:15

Б. Вставка допустимых строковых литералов времени в столбец time(7)

В таблице ниже приводится список строковых литералов, которые можно вставлять в столбец с типом данных time(7) вместе со значениями, хранящимися в этом столбце.

Формат строковых литералов Вставляемый строковый литерал Хранящееся значение time(7) Описание
SQL Server ’01:01:01:123AM’ 01:01:01.1230000 Если перед долями секунд стоит двоеточие (:), масштаб не может превышать трех позиций, иначе возникает ошибка.
SQL Server ’01:01:01.1234567 AM’ 01:01:01.1234567 Если указан параметр «AM» или «PM», время сохраняется в 24-часовом формате без литерала «AM» или «PM».
SQL Server ’01:01:01.1234567 AM’ 13:01:01.1234567 Если указан параметр «AM» или «PM», время сохраняется в 24-часовом формате без литерала «AM» или «PM».
SQL Server ’01:01:01.1234567PM’ 13:01:01.1234567 Пробел перед литералом «AM» или «PM» является необязательным.
SQL Server ’01AM’ 01:00:00.0000000 Если задан только час, все остальные значения равны 0.
SQL Server ’01 AM’ 01:00:00.0000000 Пробел перед литералом «AM» или «PM» является необязательным.
SQL Server ’01:01:01′ 01:01:01.0000000 Если не заданы доли секунды, каждая позиция, определяемая этим типом данных, равна 0.
ISO 8601 ’01:01:01.1234567′ 01:01:01.1234567 Для соответствия стандарту ISO 8601 используется 24-часовой формат, а не литералы «AM» и «PM».
ISO 8601 ’01:01:01.1234567 +01:01′ 01:01:01.1234567 Необязательная разница во времени (TZD) во входных данных разрешается, но не сохраняется.

В. Вставка строкового литерала времени в столбцы каждого типа данных date и time

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

Вставляемый строковый литерал Тип данных столбца Значение, хранящееся в столбце Описание
’12:12:12.1234567′ time(7) 12:12:12.1234567 Если точность в долях секунды превышает значение, указанное для столбца, строка будет усечена без сообщения об ошибке.
‘2007-05-07’ date NULL Любое значение времени вызовет ошибку инструкции INSERT.
’12:12:12′ smalldatetime 1900-01-01 12:12:00 Любое значение долей секунды вызовет ошибку инструкции INSERT.
’12:12:12.123′ datetime 1900-01-01 12:12:12.123 Любое значение долей секунды длиннее трех позиций вызовет ошибку инструкции INSERT.
’12:12:12.1234567′ datetime2(7) 1900-01-01 12:12:12.1234567 Если точность в долях секунды превышает значение, указанное для столбца, строка будет усечена без сообщения об ошибке.
’12:12:12.1234567′ datetimeoffset(7) 1900-01-01 12:12:12.1234567 +00:00 Если точность в долях секунды превышает значение, указанное для столбца, строка будет усечена без сообщения об ошибке.

5.1 Встроенные типы данных в SQL Server и Access

Прежде, чем создавать таблицы, необходимо разобраться с типами данных — то есть какие именно данные можно будет помещать в столбцы таблиц. Информация будет даваться для SQL Server и Access.

Вначале — о числовых типах данных.

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

· целочисленные: tinyint (0 — 255), smallint (от -32 768 до 32 767), int (от -2,147,483,648 до 2,147,483,647) и bigint (от -2^63 до 2^63 -1);

· десятичные: decimal и numeric (это — два названия одного и того же);

· денежные: money (от -2^63 до 2^63 — 1 с точностью 4 знака после запятой) и smallmoney (от -214,748.3648 до +214,748.3647).;

· с плавающей запятой: float (от -1.79E + 308 до 1.79E + 308) и real (от -3.40E + 38 до 3.40E + 38).

В MS Access все проще — там есть единственный тип поля — числовое и его подтипы в строке «размер».

Обычно, если база данных не относится к числу специальных, большая часть столбцов в ее таблицах отводится под текстовые данные. В SQL Server предусмотрены две дублирующих разновидности полей для представления текстовых данных: поля Unicode и не-Unicode. Unicode — типы данных отличить очень просто: они начинаются на n (от слова national, то есть с поддержкой национальных символов). Если есть возможность, то следует выбирать именно типы Unicode (хоть они и требуют в два раза больше места под хранение каждого символа) — поскольку современные клиенты изначально разрабатываются для удобной работы с кодировками этого типа.

Всего в SQL Server предусмотрены следующие типы для текстовых данных:

· char / nchar — строковые данные фиксированной длины (максимум 8000/4000 символов);

· varchar / nvarchar — строковые данные переменной длины (то же самое);

· text / ntext — для очень больших текстовых записей — до двух миллионов/миллиона символов.

В Access, как обычно, все проще. Есть тип данных текстовый с максимальной длинной записей в 255 символов (данные автоматически хранятся в Unicode) и тип данных Memo с максимальной длиной 65 536 знаков.

В реальных базах данных, конечно, не обойтись без полей для хранения информации дате и времени. В SQL Server это datetime (8 байт, точность то 3,33 миллисекунд) и smalldatetime (4 байта, точность до минуты). В большинстве приложений вполне хватает s malldatetime , но часто разработчики про s malldatetime забывают.

В Access у нас предусмотрен единственный 8-байтовый тип данных дата/время.

Еще один распространенный тип данных — это логический, который может хранить в себе значения вида true/false (единица/ноль). Обычно он используется как флаг чего-либо. В SQL Server он представлен типом данных bit , а в Access — типом данных, который так и называется «логический».

В современных базах данных также часто хранятся большие двоичные данные — BLOB, например, документы, фотографии, архивы и т.п. В SQL Server для них традиционно используется тип данных Image (до 2 Гбайт). Есть еще типы данных binary и varbinary , но максимальный их размер — 8000 байт, а такие маленькие двоичные данные встречаются нечасто. В Acce ss для этой цели используется тип данных поле объекта OLE (до 1 Гбайт) — то есть могут храниться данные только OLE-совместимых программ.

Есть также и некоторые специальные типы данных, которые используются нечасто:

· UniqueIdentifier в SQL Server , числовой для кодов репликации в Access. Это — большие случайно сгенерированные числа, вероятность совпадения которых практически нулевая. В базах данных они обычно используются для того, чтобы гарантировать уникальность какой-либо записи;

· поле счетчика в Access, числовой тип данных со свойством Identity в true в SQL Server. Это — числовое поле с автоприращением, обычно применяется как суррогатный ключ;

· sql_variant в SQL Server — позволяет хранить в столбце данные разных типов;

· timestamp — метка версии строки в SQL Server ;

· гиперссылка — специальный вид поля (до 64 000 знаков) в Access.

Другие типы данных ( cursor , table в SQL Server) в таблицах использоваться не могут и применяются только в запросах и хранимых процедурах.

Поддерживаемые форматы строковых литералов для типа данных time

В таблице ниже приводятся допустимые форматы строковых литералов для типа данных time.

SQL Server Описание
чч:мм чч:мм ччAM чч AM Значение часа 0 означает час после полуночи (AM), независимо от указания литерала «AM». Если час равен 0, «PM» указывать нельзя. Значения часа от 01 до 11 представляют часы до полудня, если не задан параметр AM или PM. Если задан параметр «AM», то эти значения так же представляют часы до полудня. Если указано «PM», то эти значения указывают на часы после полудня. Значение 12 представляет час, начавшийся в полдень, если не указано «PM» или «AM». Если указано «AM», это значение представляет час, начавшийся в полночь. Если указано «PM», то это значение представляет час, начавшийся в полдень. Например, 12:01 — это 1 минута после полудня, так же как и 12:01 PM, тогда как 12:01 AM — это 1 минута после полуночи. 12:01 АМ аналогично указанию 00:01 или 00:01 AM. Значения часов от 13 до 23 представляют часы после полудня, если не указано «AM» или «PM». Если задан параметр «PM», то эти значения также представляют часы после полудня. Если час принимает значение от 13 до 23, то указывать «AM» нельзя. Значение часа, равное 24, недопустимо. Для представления полночи используется 12:00 AM или 00:00. Миллисекундам может предшествовать либо двоеточие (:), либо точка (.). Число после двоеточия обозначает тысячные доли секунды. При использовании точки однозначное число обозначает десятые доли секунды, двузначное число — сотые, а трехзначное — тысячные доли секунды. Например: 12:30:20:1 означает 20 секунд и одну тысячную долю секунды после 12:30, 12:30:20.1 означает 20 секунд и одну десятую секунды после 12:30.
ISO 8601 Примечания
чч:мм:сс чч:мм чч — двузначное число от 0 до 23, представляющее количество часов в смещении часового пояса. обозначение мм состоит из двух цифр, представляющих дополнительное смещение часового пояса в минутах, и принимает значения от 0 до 59;
ODBC Примечания
{ t ‘чч-мм-сс’} Зависит от API-интерфейса ODBC.

Поддерживаемые форматы строковых литералов для типа данных datetime

В представленных ниже таблицах приводятся поддерживаемые форматы строковых литералов для типа данных datetime. За исключением ODBC, строковые литералы типа datetime заключаются в одинарные кавычки (‘), например ‘string_literaL’. Если язык среды не us_english, строковые литералы должны иметь формат N’string_literaL’.

Числовой Описание
Форматы даты 4/15/96 — (мдг) 4-15-96 — (мдг) 4.15.96 — (мдг) 4/96/15 — (мгд) 15/4/96 — (дмг) 15/96/4 — (дгм) 96/15/4 — (гдм) 96/4/15 — (гмд) Форматы времени 14:30 14:30 14:30 4am 16:00:00 Месяц в датах может указываться в числовом формате. Например, 5/20/97 обозначает двадцатое мая 1997 года. Используя числовой формат дат, указывайте месяц, день и год в виде строки со знаками косой черты (/), дефисами (-) или точками (.) в качестве разделителей. Эта строчка должна выглядеть следующим образом:число разделитель число разделитель число При использовании языковой настройки us_english порядком по умолчанию для даты является mdy (МДГ). Порядок даты можно изменить с помощью инструкции SET DATEFORMAT. Установка для SET DATEFORMAT определяет, как будут интерпретированы значения дат. Если порядок не соответствует конфигурации, значения не обрабатываются как даты. Неупорядоченные даты могут неправильно интерпретироваться как даты за пределами диапазона или даты с неправильными значениями. Например, 12/10/08 может быть интерпретировано как одна из шести различных дат в зависимости от установки DATEFORMAT. Четырехзначный год интерпретируется как год.
Алфавитный формат Описание
Apr 1996 Apr 15 96 Apr 1996 Apr 1996 15 Apr96 15 96 apr 1996 apr 1996 APR 1996 APR Можно указывать дату с полным именем месяца. Например, «апрель» или сокращение «Апр», заданное в текущем языке. Запятые не обязательны, регистр букв не учитывается. Некоторые рекомендации по применению алфавитных форматов даты: 1. Заключайте дату и время в одинарные кавычки (‘). Для всех языков, кроме английского, используйте «N’». 2. Символы, заключенные в квадратные скобки, являются необязательными. 3. Если указать две последние цифры года, значения, меньшие двух последних цифр значения параметра конфигурации сервера two digit year cutoff, будут относиться к столетию года усечения. Значения, большие или равные двум последним цифрам этого параметра, относятся к столетию, предшествующему столетию года усечения. Например, если значение параметра two digit year cutoff равно 2050 (по умолчанию), то год, обозначенный двумя цифрами 25, интерпретируется как 2025, а год, обозначенный двумя цифрами 50, — как 1950. Во избежание неоднозначности используйте четырехзначную запись года. 4. Если не указано число месяца, подразумевается первое число месяца. Параметр сеанса SET DATEFORMAT не применяется, если месяц указывается в алфавитном формате.
ISO 8601 Описание
ГГГГ-ММ-ДДТчч:мм:сс ГГГГММДД] Примеры: 1. 2004-05-23T14:25:10 2. 2004-05-23T14:25:10.487 Чтобы использовать формат ISO 8601, необходимо указать каждый элемент в этом формате, включая T, двоеточие (:) и точку (.), которые отображаются в этом формате. Квадратные скобки показывают, что доли секунд не являются обязательными. Временной компонент указан в 24-часовом формате. Символ T указывает на начало временной части значения datetime. Преимущество формата ISO 8601 заключается в том, что он является международным стандартом с однозначным представлением. Кроме того, на этот формат не влияют настройки SET DATEFORMAT и SET LANGUAGE.
Без разделителей Описание
ГГГГММДД чч:мм:сс
ODBC Описание
{ ts ‘1998-05-02 01:23:56.123’ } { d ‘1990-10-02′ } { t ’13:33:41’ } Интерфейс API ODBC определяет управляющие последовательности, представляющие значения даты и времени, называемые в ODBC метками времени. Этот формат меток времени ODBC также поддерживается определением языка OLE DB (DBGUID-SQL), поддерживаемым поставщиком Microsoft OLE DB для SQL Server. Приложения, использующие ADO, OLE DB или API-интерфейсы, основанные на ODBC, могут использовать этот формат отметок времени ODBC для представления даты и времени. Escape-последовательности меток времени ODBC имеют следующий формат: { literal_type ‘constant_value’ }: — literal_type определяет тип escape-последовательности. Метки времени имеют три описателя literal_type:1) d = только дата2) t = только время3) ts = метка времени (время + дата) — ‘constant_value’ является значением escape-последовательности. Значение constant_value должно соответствовать этим форматам для каждого literal_type.d : гггг-мм-ддt : чч:мм:ссts : гггг-мм-дд чч:мм:сс

Описание

Свойство Значение
Синтаксис datetime
Использование DECLARE @MyDatetime datetime CREATE TABLE Таблица1 ( Столбец1 datetime )
Форматы строковых литералов по умолчанию (используется для клиента нижнего уровня) Неприменимо
Диапазон даты С я января 1753 года до 31 декабря 9999 года
Диапазон времени От 00:00:00 до 23:59:590,997
Диапазон смещения часового пояса None
Диапазоны элементов ГГГГ — четырехзначное число от 1753 до 9999, представляющее год. ММ обозначает 2 цифры, которые представляют месяц и принимают значения от 01 до 12. Обозначение ДД состоит из двух цифр, представляющих день указанного месяца, и принимает значения от 01 до 31 в зависимости от месяца. Обозначение чч состоит из двух цифр, представляющих час, и принимает значения от 00 до 23. Обозначение мм состоит из двух цифр, представляющих минуту, и принимает значения от 00 до 59. Обозначение сс состоит из двух цифр, представляющих секунду, и принимает значения от 00 до 59. Обозначение n* может содержать от нуля до трех цифр, представляющих доли секунды, и принимает значения от 0 до 999.
Длина в символах Минимально 19 позиций, максимально — 23
Объем памяти 8 байт
Точность Округлено до приращения 0,000, 0,003 или 0,007 секунд
Значение по умолчанию 1900-01-01 00:00:00
Календарь Григорианский (включает полный диапазон лет)
Определяемая пользователем точность в долях секунды Нет
Учет и сохранение смещения часового пояса нет
Учет перехода на летнее время Нет
Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: