2013-03-08 4 views
1

У меня есть две колонки в моей таблице, одна для захвата времени и одна для записи даты. К сожалению, оба являются varchar(). Мне нужно взять два поля, объединить их вместе, а затем преобразовать их в datetime.T-SQL 2008 Преобразование даты и времени в datetime

Я пытаюсь добиться этого с этим:

select CONVERT(datetime,(select txt_returned_date+' '+CONVERT(varchar(20),CONVERT(TIME,txt_time_returned))),126) 
from table_name 

Я получаю сообщение об ошибке:

Conversion failed when converting date and/or time from character string. 

Эта дата захвата, как «20130308» в виде строки. Время фиксируется как «4:27 PM» в виде строки

Что я делаю здесь, это преобразование строки времени в TIME, а затем обратно в varchar. Затем я объединяя их вместе. Это работает само по себе, но как только я представляю CONVERT (datetime) для всего запроса, он дает мне ошибку.

Любая помощь, чтобы попытаться это сделать, полезна. Благодаря!

ответ

4

Вы можете объединить значения DATE и TIME вместе, как только они были преобразованы в DATETIME. Вот пример, чтобы играть с этим показывает конкатенации столбец DATE и столбец TIME, которые были сохранены в качестве VARCHAR:

-- Set up some variables to test with 
DECLARE @myTime TIME = GETDATE() 
    , @myDate DATE = GETDATE() 
    , @myTimeTxt VARCHAR(16) 
    , @myDateTxt VARCHAR(10); 

-- Initialize your variables 
SELECT @myTimeTxt = @myTime 
    , @myDateTxt = @myDate; 

-- Display your separated values 
SELECT @myDateTxt, @myTimeTxt; 

-- Display your concatenated value 
SELECT CAST(@myDateTxt AS DATETIME) + CAST(CAST(@myTimeTxt AS TIME) AS DATETIME); 
+1

Спасибо, это сделало это для меня! –

1

Вы можете использовать эту опцию

DECLARE @date date = '20010101', 
     @time time = '01:01:01' 

SELECT CAST(@date AS datetime) + @time 

Результат: 2001-01-01 01:01:01.000

Demo по SQLFiddle

0

Вы используете SQL 2012? Если это возможно, вы можете использовать функцию datetimedromparts для достижения этой цели. Если не для этого конкретного примера, это всегда хорошо знать, на будущее :)

http://technet.microsoft.com/en-gb/library/hh213233.aspx

+0

Нет, SQL 2008. К сожалению, должен был быть указан. –

Смежные вопросы