2015-07-06 7 views
2

У нас есть таблица, содержащая столбец с типом данных nvarchar(254). Эта дата колонка хранит и время в следующем формате:Преобразование nvarchar в datetime

12-MAR-15 04.07.36.000000000 PM 

Мы должны преобразовать это в формат datetime так, что мы можем работать зависит от времени запросов для извлечения необходимых результатов. Эти данные не сохраняются ни в одном из указанных выше форматов: CAST and CONVERT documentation page

Я пробовал с 130 и 131, но не повезло.

Формат здесь, кажется, dd-mon-yy hh.mm.ss.mmmmmmm PM

Кто-нибудь знает, как мы должны идти о преобразовании этого в формате «даты и времени»?

Любая помощь будет высоко оценена.

+0

ли вам нужны длинные миллисекунды после концерта? – Ionic

ответ

5

Прежде всего it'is плохая идея хранить даты как строки. This is a one way, чтобы преобразовать их обратно в дату и время, используя STUFF и REPLACE функции.

Я предполагаю, что все даты вашего являются после года 2000.

declare @d nvarchar(256) = '12-MAR-15 04.07.36.000000000 PM' 

SELECT CONVERT(DATETIME, 
     STUFF(
     REPLACE(REPLACE(
      STUFF(@d, 23, 7, ''), '-',' '),'.',':'), 8,0,'20') ) 
+0

Это работает отлично. Большое спасибо Kaf! – Umakant

+0

@Umarkant, если вы удовлетворены ответом, вас попросят принять его в качестве ответа. –

+0

@ Anuj Tripathi Done! Я пропустил это вчера, спасибо за напоминание! – Umakant

0

это может помочь вам в построении ур логики

SELECT CAST(CONVERT(VARCHAR(9), LEFT('12-MAR-15 04.07.36.000000000 PM',9), 120) AS DATE) DATE_PART , 
CASE WHEN (RIGHT('12-MAR-15 04.07.36.000000000 PM', 2)='PM' AND Substring('12-MAR-15 04.07.36.000000000 PM', 11, 2) <> '12') 
    THEN Cast(Cast(Substring('12-MAR-15 04.07.36.000000000 PM', 11, 2) AS INT)+12 AS CHAR(2)) 
WHEN (RIGHT('12-MAR-15 04.07.36.000000000 PM', 2)='AM' AND Substring('12-MAR-15 04.07.36.000000000 PM', 11, 2)='12') 
    THEN '00' 
ELSE Substring('12-MAR-15 04.07.36.000000000 PM', 11, 2) END + ':' + Substring('12-MAR-15 04.07.36.000000000 PM', 14, 2) TIME_PART 
2

В основном вам нужно преобразовать строку даты в один из этих стилей, поддерживаемых SQL Server. В следующем примере я Намеченная дата стиль 109 (mon dd yyyy hh:mi:ss:mmmAM):

-- character position    0  1   2 
--         123456789
DECLARE @DATESTR AS NVARCHAR(254) = '12-MAR-15 04.07.36.000000000 PM' 

SELECT CONVERT(DATETIME, 
    SUBSTRING(@DATESTR, 4, 3) + ' ' + -- mon 
    SUBSTRING(@DATESTR, 1, 2) + ' ' + -- dd 
    SUBSTRING(@DATESTR, 8, 2) + ' ' + -- yy 
    SUBSTRING(@DATESTR, 11, 2) + ':' + -- hh 
    SUBSTRING(@DATESTR, 14, 2) + ':' + -- mi 
    SUBSTRING(@DATESTR, 17, 2) + ':' + -- ss 
    SUBSTRING(@DATESTR, 20, 3) +  -- mmm 
    RIGHT(@DATESTR, 2)     -- am/pm 
, 109) AS Converted 

-- 2015-03-12 16:07:36.000 
Смежные вопросы