2015-08-17 5 views
2

Я передаю дату начала и дату окончания в мою хранимую процедуру. Я делаю простой тест здесь:SQL Server 2008 Параметр даты

DECLARE @StartDate DATE = '10/06/2013' --dd/mm/yyyy 
SELECT @StartDate -- this statement running successfully 

DECLARE @EndDate DATE = '30/06/2013' --dd/mm/yyyy 
SELECT @EndDate -- this statement giving error 

Этот оператор возвращает следующую ошибку

Msg 241, уровень 16, состояние 1, строка 2
Конверсия удалось при преобразовании даты и/или времени из символьной строки.

Есть ли у кого-нибудь идеи, что пойдет не так с EndDate?

ответ

5

Я уверен, что ошибка в этой строке:

DECLARE @EndDate DATE = '30/06/2013' --dd/mm/yyyy 

Не на SELECT. Было бы бессмысленно, что это было бы на SELECT, потому что обработка переменной должна быть прекрасной.

Я бы порекомендовал вам использовать форматы YYYYMMDD. Ниже приводятся мои предпочтения:

DECLARE @EndDate DATE = '2013-30-06' ; 

Однако он может не работать для определенных параметров интернационализации. Документирована всегда следующие работы:

DECLARE @EndDate DATE = '20133006' ; 
0

'10/06/2013' означает 06-окт-2013 не 10-Июнь-2013. С 30-м месяцем ничего не существует, как в вашем @EndDate '30/06/2013 '.

DECLARE @StartDate DATE='10/06/2013' 
DECLARE @DummyDate DATE = '2013-Oct-06' 

IF @StartDate = @DummyDate 
BEGIN 
    SELECT 1 
END 
0

сервером SQL по умолчанию принимает значение даты в формате «гггг-мм-дд»,

Таким образом, вы должны следовать этому формату или вам необходимо преобразовать формат даты соответственно.

T-SQL конвертировать строку даты и времени - SQL новообращенного сервера строки на сегодняшний день

SELECT convert(datetime, '10/23/2016', 101) -- mm/dd/yyyy 
SELECT convert(datetime, '2016.10.23', 102) -- yyyy.mm.dd 
SELECT convert(datetime, '23/10/2016', 103) -- dd/mm/yyyy 
SELECT convert(datetime, '23.10.2016', 104) -- dd.mm.yyyy 
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy 

-- mon types are nondeterministic conversions, dependent on language setting 
SELECT convert(datetime, '23 OCT 2016', 106) -- dd mon yyyy 
SELECT convert(datetime, 'Oct 23, 2016', 107) -- mon dd, yyyy 

-- SQL string to datetime conversion without century - some exceptions 
SELECT convert(datetime, '10/23/16', 1)   -- mm/dd/yy 
SELECT convert(datetime, '16.10.23', 2)   -- yy.mm.dd 
SELECT convert(datetime, '23/10/16', 3)   -- dd/mm/yy 
SELECT convert(datetime, '23.10.16', 4)   -- dd.mm.yy 
SELECT convert(datetime, '23-10-16', 5)   -- dd-mm-yy 
SELECT convert(datetime, '23 OCT 16', 6)  -- dd mon yy 
SELECT convert(datetime, 'Oct 23, 16', 7) -- mon dd, yy