2017-02-14 3 views
1

Я пытаюсь этоПочему ошибка преобразования времени?

declare @OpeningTime varchar(10) 
Declare @OpeningTimeFormatted time(7) 

Set @OpeningTime= '12:00pm' 
Set @OpeningTimeFormatted= (Select CONVERT(time, CONVERT(varchar,CONVERT(date, getdate()))+ @OpeningTime, 120)) 

Select @OpeningTimeFormatted 

но он выдает ошибку:

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

Почему бы просто не сделать DECLARE @Time TIME (7) = '12: 00pm '; 'Похоже, вы слишком усложняете довольно прямолинейную задачу ... Также вы должны [** всегда ** указывать длину при преобразовании или объявлении varchar] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx) – GarethD

ответ

1

Вам нужно пространство между вашим временем и датой. Просто измените OpeningTime на

Set @OpeningTime= ' 12:00pm' 

или

Set @OpeningTimeFormatted= (Select CONVERT(time, CONVERT(varchar,CONVERT(date, getdate())) + ' ' + @OpeningTime, 120)) 

В противном случае ваша дата будет выглядеть 2017-02-1412:00pm

+1

Но есть все еще некоторая неправильная мысль происходит здесь, так как часть CONVERT (time, ... 'в любом случае собирается выбросить любые части даты. Непонятно, что фактически пытается выполнить OP. –

+0

@Damien_The_Unbeliever Да, это правильно. не знаю, что ожидает OP. –

+0

Возможно, просто конвертировать с 12 часов до 24 часов –

0

Вам необходимо пространство:

Set `@OpeningTimeFormatted= (Select CONVERT(time, CONVERT(varchar,CONVERT(date, getdate()))+ ' ' + @OpeningTime, 120))` 
0

Вы объявили @OpeningTimeFormatted как time(7) - он не может Дата.
Я подозреваю, что вы хотите получить текущую дату в определенное время, для этого вы хотите объявить @OpeningTimeFormatted в datetime2:

declare @OpeningTime varchar(10) 
Declare @OpeningTimeFormatted datetime2 

Set @OpeningTime= '12:00pm' 

SET @OpeningTimeFormatted = convert(datetime2, 
            convert(char(10), getdate(), 120) +' '+ 
            convert(char(8), @OpeningTime, 120), 
          120) 

Select @OpeningTimeFormatted 

Результат:

14.02.2017 12:00:00 -- today, tomorrow of course the date would be different... 

Если, с другой стороны, просто хочу получить время, указанное в varchar, вам нужно только convert(time(7), @OpeningTime, 120).