powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Преобразование даты через CONVERT(), форматы 126 и 127 .
6 сообщений из 6, страница 1 из 1
Преобразование даты через CONVERT(), форматы 126 и 127 .
    #40075867
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это у всех так или мне особенно "повезло" с версией?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
-------------------------------------------------------------------------------------------------
Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) 
	Sep 24 2019 13:48:23 
	Copyright (C) 2019 Microsoft Corporation
	Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)



convert(nvarchar(50),getdate(),127)                convert(nvarchar(50),getdate(),126)
-------------------------------------------------- --------------------------------------------------
2021-06-05T19:33:53.140                            2021-06-05T19:33:53.140

convert(nvarchar(50),cast(getdate() as datetimeoffset) ,127) convert(nvarchar(50),cast(getdate() as datetimeoffset) ,126) 
------------------------------------------------------------ -------------------------------------------------------------
2021-06-05T19:33:53.1400000Z                                 2021-06-05T19:33:53.1400000+00:00


Почему форматы 126 и 127 меняют выдачу в зависимости от исходного представления данных (datetime vs datetimeoffcet) ?

--------------------------
No ROM Basic...

P.S. Тута подробностей не увидел

Код: sql
1.
2.
3.
4.
set nocount on;
select @@version;
select convert(nvarchar(50),getdate(),127) [convert(nvarchar(50),getdate(),127)], convert(nvarchar(50),getdate(),126) [convert(nvarchar(50),getdate(),126)]
select convert(nvarchar(50),cast(getdate() as datetimeoffset) ,127)  [convert(nvarchar(50),cast(getdate() as datetimeoffset) ,127)], convert(nvarchar(50),cast(getdate() as datetimeoffset) ,126) [convert(nvarchar(50),cast(getdate() as datetimeoffset) ,126) ]


...
Рейтинг: 0 / 0
Преобразование даты через CONVERT(), форматы 126 и 127 .
    #40075871
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю, вам нужно перечитать документацию по типам данных (datetime vs datetimeoffcet) и чем они отличаются.

При преобразовании из типа datetimeoffset(n) копируются компоненты даты и времени. Часовой пояс усекается. Если точность в долях секунды для значения datetimeoffset(n) превышает три разряда, значение будет усечено. Следующий пример показывает результаты преобразования значения datetimeoffset(4) в значение datetime.
...
Рейтинг: 0 / 0
Преобразование даты через CONVERT(), форматы 126 и 127 .
    #40075874
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
godsql
Думаю, вам нужно перечитать документацию по типам данных (datetime vs datetimeoffcet) и чем они отличаются.

При преобразовании из типа datetimeoffset(n) копируются компоненты даты и времени. Часовой пояс усекается. Если точность в долях секунды для значения datetimeoffset(n) превышает три разряда, значение будет усечено. Следующий пример показывает результаты преобразования значения datetimeoffset(4) в значение datetime.


Эээээммм....
Вопрос был не про datetimeOFFSET => datetime а про то, почему convert с форматами 126 и 127 выдаёт несколько разные строки при разных типах исходных данных ... Может это где-то в настройках управляется. Есличо, в документации есть ссылка на стандарт ISO , под который можно пропихнуть что угодно, но с примерами беда (например, знаков после точки не 3 а 6, Z то есть - то нет, ...):
...
Рейтинг: 0 / 0
Преобразование даты через CONVERT(), форматы 126 и 127 .
    #40075879
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторпочему convert с форматами 126 и 127 выдаёт несколько разные строки при разных типах исходных данных
Потому, что это разные типы данных. :)
в одном случае - datetime (Часовой пояс усекается. Если точность в долях секунды превышает три разряда, значение будет усечено)
в другом - datetimeoffset, где все это присутствует
А стиль уже применяется к конкретному значению конкретного формата

Вы же не удивляетесь, почему convert(varchar(10), 15.2222 as int) выдаст совсем не то ,что convert(varchar(10), 15.2222 as decimal(31,2)) нежели исходные данные (15.2222)
...
Рейтинг: 0 / 0
Преобразование даты через CONVERT(), форматы 126 и 127 .
    #40075880
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, я со своей задачей справился. Но на выходе я жду строку в определённом формате, который описан. Надо будет всю эту хреноту попробовать в C# ,- не удивлюсь если будет похожее,- возможно где-то в глубине винды сиё поведение реализовано...


Так, чиста поржать (логично, но не всегда) :
Код: sql
1.
2.
3.
4.
set nocount on;
select convert(int, 17.777) [convert(int, 17.777)      ],convert(decimal, 17.777) [convert(decimal, 17.777)]
select convert(int, 17) [convert(int, 17)          ],convert(decimal, 17) [convert(decimal, 17) ]
select convert(int, 0.17777E2) [convert(int, 0.17777E2)   ], convert(decimal, 0.17777E2) [convert(decimal, 0.17777E2)]



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
convert(int, 17.777)       convert(decimal, 17.777)
-------------------------- ---------------------------------------
17                         18

convert(int, 17)           convert(decimal, 17) 
-------------------------- ---------------------------------------
17                         17

convert(int, 0.17777E2)    convert(decimal, 0.17777E2)
-------------------------- ---------------------------------------
17                         18

...
Рейтинг: 0 / 0
Преобразование даты через CONVERT(), форматы 126 и 127 .
    #40075902
4es
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
4es
Гость
SIMPLicity_
логично, но не всегда

Да всё логично. Всё это поведение отлично описано в документации и известно.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Преобразование даты через CONVERT(), форматы 126 и 127 .
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]