Приведите или конвертируйте ДД-МОН-ГГГГ AM / PM в ГГГГ-ММ-ДД - PullRequest
0 голосов
/ 08 декабря 2018

Я застрял в поиске ответа о том, как конвертировать: 07-DEC-18 01.00.54.984000 PM в 2018-12-07 13.00.54.984000

Я думаю, что время 01.00.54 PM составляет 13 часов, 0 минут и 54 секунды

Я пытаюсь конвертировать с 112, но все еще не могу понять, как это сделать или конвертировать.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Ниже приведен один метод, который преобразует части даты и времени отдельно, а затем использует DATEADD для объединения результатов.Это предполагает, что фактическая точность времени не превышает миллисекунд.Обратите внимание, что вам нужно использовать datetime2 вместо datetime, чтобы избежать округления до 1/300 миллисекунд.

DECLARE @DateTimeString varchar(30) = '07-DEC-18 01.00.54.984000 PM';
SELECT DATEADD(
      millisecond
    , DATEDIFF(millisecond, '', CAST(REPLACE(SUBSTRING(@DateTimeString, 11, 8), '.', ':') + RIGHT(@DateTimeString, 10) AS time))
    , CAST(LEFT(@DateTimeString, 9) AS datetime2)
    );
0 голосов
/ 08 декабря 2018

Это преобразует ваше значение в тип данных, который должен быть, datetime2(6).Типы данных даты и времени не имеют форматов. Если вы храните их в определенном формате, вы делаете это неправильно (это означает, что вы сохраняете значение как varchar).

DECLARE @YourDate varchar(30) = '07-DEC-18 01.00.54.984000 PM';

SELECT V.YD,
       TRY_CONVERT(datetime2(6),F.FormatedYD,106)
FROM (VALUES(@YourDate)) V(YD)
     CROSS APPLY (VALUES(STUFF(STUFF(V.YD,13,1,':'),16,1,':'))) F(FormatedYD);

Если бы это была таблица, то я бы исправил ваш фактический тип данных столбца, выполнив следующее:

UPDATE YT
SET YourDateColumn = CONVERT(varchar(30),TRY_CONVERT(datetime2(6),F.FormatedYD,106),126)
FROM YourTable YT
     CROSS APPLY (VALUES(STUFF(STUFF(YT.YourDateColumn,13,1,':'),16,1,':'))) F(FormatedYD);

ALTER TABLE YourTable ALTER COLUMN YourDateColumn datetime2(6);
...