Вычисление даты и времени из строки?

#sql #sql-server-2008

#sql #sql-server-2008

Вопрос:

У меня есть дата и время в файле csv, подобном этому: 20140618123022 и формат столбца таков datetime , вопрос в том, каков наилучший способ преобразовать эту строку в формат даты и времени ‘2014-06-18 12:30:22’?

Для этого я создам процедуру пула ..

и я думал использовать or RIGHT() и LEFT() and concatenation , это правильный путь?

      CONVERT([datetime],(((((((((CONVERT([varchar](4),[data],(0)) '-') substring([data],(5),
    (2))) '-') substring([data],(7),(2))) ' ') substring([data],(9),
    (2))) ':') substring([data],(11),(2))) ':') substring([data],(13),(2)),(0))
  

Комментарии:

1. Наилучший способ зависит от базы данных. Какую базу данных вы используете?

2. Вот статья, с которой нужно начать: sqlservercentral.com/articles/T-SQL/88152 Вероятно, ваш лучший выбор — это CLR для достижения вашей цели

Ответ №1:

 declare @a varchar(20)
set @a='20140618123022'

select convert(datetime,(left(@a,4) '-' substring(@a,5,2) '-' substring(@a,7,2) ' ' substring(@a,9,2) ':' substring(@a,11,2) ':' right(@a,2))) 
  

ИЛИ это!

 select convert(datetime,(left(@a,8) ' ' substring(@a,9,2) ':' substring(@a,11,2) ':' right(@a,2)))
  

ДЕМОНСТРАЦИЯ

—возвращает

 2014-06-18 12:30:22.000
  

Комментарии:

1. Разделение года, месяца и дня не требуется, ‘20140618 12:30:22’ анализируется правильно

Ответ №2:

Вы можете использовать функцию STUFF, как показано ниже:

 DECLARE @D CHAR(14) = '20140619123022'
SELECT STUFF(
        STUFF(
            STUFF(
                STUFF(
                  STUFF(@D,5,0,'-')
                    ,8,0,'-')
                ,11,0,' ')
            ,14,0,':')
        ,17,0,':')
  

Вам нужно будет убедиться, что длина вашей строки согласована, т.Е. Это строка длиной 14 символов.
Ссылка на скрипку: http://www.sqlfiddle.com /#!3/d41d8/35769/0