Преобразования типа данных datetime из SQL в C
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)
В следующей таблице перечислены проблемы, которые следует учитывать при преобразовании типов даты и времени SQL Server в типы C.
Преобразования
SQL_C_DATE | SQL_C_TIME | SQL_C_TIMESTAMP | SQL_C_SS_TIME2 | SQL_C_SS_TIMESTAMPOFFSET | SQL_C_BINARY | SQL_C_CHAR | SQL_C_WCHAR | |
---|---|---|---|---|---|---|---|---|
SQL_CHAR | 2,3,4,5 | 2,3,6,7,8 | 2,3,9,10,11 | 2,3,6,7 | 2,3,9,10,11 | 1 | 1 | 1 |
SQL_WCHAR | 2,3,4,5 | 2,3,6,7,8 | 2,3,9,10,11 | 2,3,6,7 | 2,3,9,10,11 | 1 | 1 | 1 |
SQL_TYPE_DATE | ОК | 12 | 13 | 12 | 13,23 | 14 | 16 | 16 |
SQL_SS_TIME2 | 12 | 8 | 15 | ОК | 10,23 | 17 | 16 | 16 |
SQL_TYPE_TIMESTAMP | 18 | 7,8 | ОК | 7 | 23 | 19 | 16 | 16 |
SQL_SS_TIMESTAMPOFFSET | 18,22 | 7,8,20 | 20 | 7,20 | ОК | 21 | 16 | 16 |
Расшифровка символов
Символ | Значение |
---|---|
ОК | Проблемы преобразования отсутствуют. |
1 | Правила до ПРИМЕНЕНИЯ SQL Server 2008 (10.0.x). |
2 | Начальные и конечные пробелы пропускаются. |
3 | Выполняется синтаксический анализ строки, при котором из нее извлекается дата, время, часовой пояс или смещение часового пояса, при этом допускается точность задания долей секунды до 9 десятичных знаков. Если при анализе обнаруживается смещение часового пояса, то время преобразуется к часовому поясу клиента. Если во время этого преобразования возникает ошибка, в SQLSTATE 22018 создается диагностическая запись и сообщение "Переполнение поля Datetime". |
4 | Если значение не является действительной датой, отметкой времени или значением timestampoffset, то формируется диагностическая запись с ошибкой SQLSTATE 22018 и сообщением «Недопустимое символьное значение для спецификации приведения». |
5 | Если значение времени не равно нулю, то создается запись диагностики с кодом SQLSTATE 01S07 и сообщением «Частичное усечение». |
6 | Если значение не является действительным значением времени, отметкой времени или значением timestampoffset, то формируется диагностическая запись с ошибкой SQLSTATE 22018 и сообщением «Недопустимое символьное значение для спецификации приведения». |
7 | Компонент даты не учитывается. |
8 | Если значение долей секунды не равно нулю, то создается диагностическая запись с кодом SQLSTATE 01S07 и сообщением «Частичное усечение». |
9 | Если значение не является действительным значением даты, времени, отметкой времени или значением timestampoffset, то формируется диагностическая запись с ошибкой SQLSTATE 22018 и сообщением «Недопустимое символьное значение для спецификации приведения». |
10 | Если значение является действительным значением времени, то компонент даты принимает значение текущей даты на стороне клиента. |
11 | Если значение является действительным значением даты, то для времени устанавливается значение, равное нулю. |
12 | Создается запись диагностики с кодом SQLSTATE 07006 и сообщением «Нарушение атрибута ограниченного типа данных». |
13 | Время установлено в нуль. |
14 | Если буфер недостаточно велик для значения SQL_DATE_STRUCT, то формируется диагностическая запись с ошибкой SQLSTATE 22003 и сообщением «Численное значение вне допустимого диапазона». |
15 | Дата устанавливается равной текущей дате на стороне клиента. |
16 | Если буфер недостаточно велик для преобразованного строкового значения, но не помещается только дробное значение секунд, то происходит усечение долей секунд и формируется диагностическая запись с ошибкой SQLSTATE 01004 и сообщением «Строковые данные, усечение справа». Если буфер недостаточно велик для помещения строкового значения без усечения компонентов даты, времени или смещения, то формируется диагностическая запись с ошибкой SQLSTATE 22003 и сообщением «Численное значение вне допустимого диапазона». Учтите, что для значений типа timestampoffset и значений даты невозможна ошибка SQLSTATE 01004, поскольку крайняя правая часть преобразованной строки не содержит долей секунды. Поэтому при любом усечении неизбежна потеря данных. |
17 | Если буфер недостаточно велик для значения SQL_SS_TIME2_STRUCT, то формируется диагностическая запись с ошибкой SQLSTATE 22003 и сообщением «Численное значение вне допустимого диапазона». |
18 | Если значение времени не равно нулю, то создается запись диагностики с кодом SQLSTATE 01S07 и сообщением «Частичное усечение». |
19 | Если серверный тип — datetime или smalldatetime, то значение соответствует формату потока табличных данных и будет 4-байтовым значением для smalldatetime или 8-байтовым для datetime. Если типом данных на стороне сервера является datetime2, то значение возвращается в виде SQL_TIMESTAMP_STRUCT. Если буфер недостаточно велик для возвращенного значения, то формируется диагностическая запись с ошибкой SQLSTATE 22003 и сообщением «Численное значение вне допустимого диапазона». |
20 | Время приводится к часовому поясу клиента. Если во время этого преобразования возникла ошибка, создается запись диагностики с кодом SQLSTATE 22008 и сообщением «Переполнение поля datetime». |
21 | Если буфер недостаточно велик для значения SQL_SS_TIMESTAMPOFFSET_STRUCT, то значение возвращается в виде SQL_SS_TIMESTAMPOFFSET_STRUCT. В противном случае формируется диагностическая запись с ошибкой SQLSTATE 22003 и сообщением «Численное значение вне допустимого диапазона». |
22 | Это значение приводится к часовому поясу клиента до извлечения даты. Тем самым обеспечивается согласованность с другими преобразованиями с типами timestampoffset. Если во время этого преобразования возникла ошибка, создается запись диагностики с кодом SQLSTATE 22008 и сообщением «Переполнение поля datetime». В результате может быть получена дата, отличающаяся от значения, получаемого простым усечением. |
Таблица в этом разделе описывает преобразования между типами, возвращаемыми клиенту, и типами в привязке. Для выходных параметров, если тип сервера, указанный в SQLBindParameter, не соответствует фактическому типу на сервере, то неявное преобразование будет выполняться сервером, а тип, возвращенный клиенту, будет соответствовать типу, указанному через SQLBindParameter. Это может привести к непредвиденным результатам преобразования, если правила преобразования сервера отличаются от указанных в предыдущей таблице. Например, если необходимо указать дату по умолчанию, SQL Server использует 1900-1-1, а не текущую дату.
См. также
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру