2010-11-09 4 views
2

У меня есть SQL Server 2005, и все даты хранятся с использованием типа столбца DATETIME. Переднее приложение обрабатывает даты в формате «yyyyMMdd hhmmss». Я пишу набор SQL-запросов и хранимых процедур и задавался вопросом, есть ли простой способ преобразовать этот формат в стандартный SQL DATETIME. Я не кодировал внешнее приложение, поэтому я не могу вносить в него никаких изменений.SQL Server String Parsing

Я изучил CONVERT(), но ни один из кодов типов не соответствует тому, что я хочу. Ближайший -

CONVERT(DATETIME, '20101017' 112) 

Но у этого нет компонента времени ввода. Есть идеи? или мне нужно написать SQL-функцию для этого синтаксического анализа и преобразования.

Спасибо,

ответ

3

Если вставить двоеточие в соответствующие места в свое время, вы можете использовать стиль 120.

declare @d varchar(15) 
set @d = '20101017 111428' 

select CONVERT(DATETIME, stuff(stuff(@d,12,0,':'),15,0,':'), 120) 
+0

+1: намного проще, чем у меня – RedFilter

1

Вы можете найти this страницу, чтобы быть полезным (если вы можете получить за психоз индуцирующего цветовой схемы).

+0

Спасибо, что страница действительно содержит много примеров действительно , Кажется, что мне придется использовать строковые функции для подстроки и/или вставить «-» и «:». –

+0

@ del.ave: да, это казалось очень примерным (и раздражающим глаз с форматированием)! –

1

Как об этом:

declare @s as varchar(25) 
set @s = '20101109 172054' 
select @s, convert(datetime, SUBSTRING(@s, 1, 4) + '-' + SUBSTRING(@s, 5, 2) 
    + '-' + SUBSTRING(@s, 7, 3) + SUBSTRING(@s, 10, 2) + ':' 
    + SUBSTRING(@s, 12, 2) + ':' + SUBSTRING(@s, 14, 2), 20)