SQL Server: дата-время, миллисекунд AM / PM, приведение - PullRequest
2 голосов
/ 05 марта 2019

Как лучше всего разыграть этого варчара на сегодняшний день:

'21-DEC-17 11.09.52.020000 AM'

Я просмотрел страницу Стили даты и времени , но ни один из них не подходит. Спасибо

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Проблема на самом деле в ваших 2 ., где вы должны иметь :. Если позиция не меняется, то у вас есть целый ряд вариантов:

WITH N AS
    (SELECT N
     FROM (VALUES (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL),
                  (NULL)) N (N) ),
Tally AS
    (SELECT TOP 200
            ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
     FROM N N1,
          N N2,
          N N3)
SELECT S.YourDate,
       TRY_CONVERT(datetime2(7), S.YourDate, I) AS ConvertedDate,
       I AS StyleCode
FROM Tally
     CROSS APPLY (VALUES ('21-DEC-17 11.09.52.020000 AM')) V(YourDate)
     CROSS APPLY (VALUES (STUFF(STUFF(V.YourDate, 13, 1, ':'), 16, 1, ':'))) S(YourDate)
WHERE TRY_CONVERT(datetime2(7), S.YourDate, I) IS NOT NULL;

Редактировать: фактически, если вы измените эти 2 ., вы не сможетедаже не нужен код стиля, по крайней мере, на моем экземпляре и языке;но я предполагаю, что при значении типа DEC вы используете английскую производную:

SELECT S.YourDate,
       TRY_CONVERT(datetime2(7), S.YourDate) AS ConvertedDate
FROM (VALUES ('21-DEC-17 11.09.52.020000 AM')) V (YourDate)
     CROSS APPLY (VALUES (STUFF(STUFF(V.YourDate, 13, 1, ':'), 16, 1, ':'))) S (YourDate);
1 голос
/ 05 марта 2019

Чтобы сделать его конвертируемым в DATETIME:

  • точки заменены на двоеточие
  • 0000 удалено

SQL

-- results to: 2017-12-21 11:09:52.003
SELECT CAST(REPLACE(REPLACE('21-DEC-17 11.09.52.020000 AM', '.', ':'), '0000', '') AS DATETIME);

В случае, если тип DATETIME недостаточно точен, рассмотрите возможность использования подхода DATETIME2, опубликованного в другом ответе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...