Преобразование этой строки в формате 103 сработало бы, если бы в ней не было 6 последних нулей.
Таким образом, SUBSTRING
или LEFT
может использоваться для хранения только 23 символов.
А затем преобразовать его в DATETIME.
Но эта строка может быть просто преобразована в DATETIME2.
Поскольку DATETIME2 является более точным.
И DATETIME2 может быть просто приведен или преобразован в DATETIME.
Обратите внимание, что DATETIME не сохраняется с форматом в таблице.
То, как это отображается, является настройкой.
Однако вы можете FORMAT DATETIME вернуться к строке в определенном формате , который вам нужен. (начиная с SQL Server 2012)
Пример фрагмента:
select
col as col_input_string,
CAST(CONVERT(datetime2, col, 103) AS datetime) as col_as_datetime,
FORMAT(CONVERT(datetime2, col, 103), 'dd/MM/yyyy HH:mm:ss.fff') as col_as_formatted_string
from (values
('01/04/2019 01:50:31.230000000')
,('31/12/2018 13:33:44.123456789')
) q(col);
Результат:
col_input_string col_as_datetime col_as_formatted_string
01/04/2019 01:50:31.230000000 2019-04-01 01:50:31.230 01/04/2019 01:50:31.230
31/12/2018 13:33:44.123456789 2018-12-31 13:33:44.123 31/12/2018 13:33:44.123