2015-02-02 3 views
0

Мне нужно вычислить totaldays в этой процедуре магазина, но я получаю ошибку преобразования:Конверсия удалось при преобразовании даты и/или времени из символьной строки расчета дней

DECLARE @ifIsMarch varchar(6), @addOneDay date, @startDay int,   
@disconnectDay int, @startMonth int, @disconnectMonth int, @startYear 
int, @disconnectYear int, @totaldays int 

SELECT @startDay = DAY('2014-02-28') 
SELECT @disconnectDay = DAY('2014-10-31') 
SELECT @startMonth = MONTH('2014-02-28') 
SELECT @disconnectMonth = MONTH('2014-10-31') 
SELECT @startYear = YEAR('2014-02-28') 
SELECT @disconnectYear = YEAR('2014-10-31') 

print @startDay 
print @disconnectDay 
print @startMonth 
print @disconnectMonth 
print @startYear 
print @disconnectYear 

SELECT @addOneDay = DATEADD(DAY, 1, CONVERT(DATE, '2014-02-28')) 
SELECT @ifIsMarch = LEFT(CONVERT(VARCHAR(15), @addOneDay, 110), 5) 

print @addOneDay 
Print @ifIsMarch 

select @totaldays = 
CASE 
    WHEN @ifIsMarch = '03-01' THEN 
    CASE 
    WHEN @DisconnectDate = '31' THEN (360*(@disconnectYear - @startYear)) + (30*(@disconnectMonth - @startMonth)) 
    ELSE (360*(@disconnectYear - @startYear)) + (30*(@disconnectMonth - @startMonth)) + (@disconnectDay - 30) 
    END 
END 

print @totaldays 
+0

Вы не объявили '@ DisconnectDate' переменная – Lamak

+0

И единственное, что вы хотите сделать, это получить количество дней между 2 датами ?, то вы, очевидно, должны используйте 'DATEDIFF', поскольку текущий ответ говорит – Lamak

ответ

1

, когда я получаю ошибку преобразования с DateTime , я обычно изменить позиции номер месяца с номером дня и он начинает работать

, чтобы получить разницу между двумя датами я бы предложил использовать DATEDIFF

declare @startDate datetime = '20140228' 
declare @disconnectDate datetime = '20141031' 
SELECT datediff(day, @startDate, @disconnectdate) 

, если у вас есть даты, -

declare @startDate datetime = convert(datetime, '2014-02-28', 21) 
declare @disconnectDate datetime = convert(datetime, '2014-10-31', 21) 
SELECT datediff(day, @startDate, @disconnectdate) 
+0

удалить" - "работает! Но как мне конвертировать '2014-02-08' в '20140228', поскольку дата вытягивается из таблицы? – angelcake

+0

@angelcake, попробуйте следующее: выберите convert (datetime, '2014-02-28', 21) - 21 - определенный формат yyyy-mm-dd; он просто преобразует строку в datetime – ASh

+0

Мне нужно изменить '2014-02-08' на '20140228', как вы предполагали ранее. 21 - yyyy-mm-dd, а не yyyymmdd – angelcake

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