Как преобразовать строку в дату и время, используя T-SQL? - PullRequest
2 голосов
/ 05 августа 2011

Привет всем, я пытаюсь проанализировать XML-файл в SQl Server 2005. У меня есть поле даты и времени в XML-файле, которое представляет собой следующую строку: '20110805060028.387'. Я хочу преобразовать это в поле даты и времени на сервере SQL, но я борюсь с синтаксисом. Можно ли из этой строки получить дд / мм / ггг чч: мм: сс.мс (мс = микросекунды)?

Ответы [ 4 ]

6 голосов
/ 05 августа 2011

Это не поддерживаемый формат, поэтому вам нужно;

declare @dt varchar(42)= '20110805060028.387'
--convert to '20110805 06:00:28.387'
select cast(stuff(stuff(stuff(@dt, 9, 0, ' '), 12, 0, ':'), 15, 0, ':') as datetime)

>>2011-08-05 06:00:28.387
3 голосов
/ 05 августа 2011

Подстрока ваш друг здесь:

DECLARE @Value NVarChar(50)
SET @Value = '20110805060028.387'
SELECT Convert(DateTime, 
    SubString(@Value, 1, 4) + '-' + 
    SubString(@Value, 5, 2) + '-' + 
    SubString(@Value, 7, 2) + ' ' + 
    SubString(@Value, 9, 2) + ':' + 
    SubString(@Value, 11, 2) + ':' + 
    SubString(@Value, 13, 10))

(кстати, я целенаправленно НЕ следую вашему формату "дд / мм / ггг" при создании разбираемой здесь строки даты, а скорее международный (не совсем ISO-стандартный) формат, который SQL-сервер будет правильно читать независимо от того, DATEFORMAT настройки сервера)

1 голос
/ 05 августа 2011

Мой дубль (обязательно не самый лучший):

DECLARE @val VARCHAR(30)='20110805060028.387'
SELECT LEFT(@val,4) [yyyy], RIGHT(LEFT(@val,6),2)[mm], RIGHT(LEFT(@val,8),2)[dd], 
      RIGHT(LEFT(@val,10),2)[hh], RIGHT(LEFT(@val,12),2)[mi], 
      RIGHT(LEFT(@val,14),2)[ss],SUBSTRING(@val, 15,LEN(@val)-14) [ms]

DECLARE @date DATETIME
SELECT @date = CAST(LEFT(@val,4) + '-' + RIGHT(LEFT(@val,6),2) + '-' + 
               RIGHT(LEFT(@val,8),2) + ' ' + RIGHT(LEFT(@val,10),2) + ':' +
               RIGHT(LEFT(@val,12),2) + ':' + RIGHT(LEFT(@val,14),2) + 
               SUBSTRING(@val, 15,LEN(@val)-14) AS DATETIME)

SELECT @date, DATEPART(MILLISECOND,@date)[ms], DATEPART(MONTH,@date)[MM]
1 голос
/ 05 августа 2011
DECLARE @parsedValue VARCHAR(MAX)
DECLARE @rawDateValue VARCHAR(MAX)
SET @rawDateValue  = '20110805060028.387'

SET @parsedValue =  SUBSTRING(@rawDateValue, 1, 4) + '/' +
SUBSTRING(@rawDateValue, 5, 2) + '/' +
SUBSTRING(@rawDateValue, 7, 2) + ' ' +
SUBSTRING(@rawDateValue, 9, 2) + ':' +
SUBSTRING(@rawDateValue, 11, 2) + ':' +
SUBSTRING(@rawDateValue, 13, 2) + ':' +
SUBSTRING(@rawDateValue, 16, 3)

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