2016-09-11 3 views
0

У меня есть следующий SQL-запрос, который получает дату (один параметр даты начала и конца даты, разделенный запятой) в качестве параметра и должен возвращать все значения между этими датами.Ошибка преобразования в SQL Server

(Long запрос - я отправляю только соответствующая часть)

Set @SQLQuery = @SQLQuery + 'And (o.Date >= LEFT(''' + @Date + ''', charindex('','',''' + @Date+ ''') - 1)' 
+ ' AND o.Date <= RIGHT(''' + @Date + ''', charindex('','',''' + @Date+ ''') - 1)) ' 

Формат параметра дата:

start date,end date in MM,DD,YYYY format 

Если параметр дата, например: 8-5-2015,08-9-2016 это работает отлично, но когда это, например, 8-5-2015,08-11-2016 Я получаю следующую ошибку:

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

Я думаю, что это связано с двумя цифрами на части дней.

Любая идея, что может вызвать это?

+0

Split '@ date' за пределами выражения, за исключением частей в переменные типа' datetime' с помощью [ 'convert' с явной форме] (https://msdn.microsoft.com/en-us/ library/ms187928.aspx # Anchor_4), и вызовите свой встроенный запрос с помощью '' sp_executesql' '(https://msdn.microsoft.com/en-us/library/ms188001.aspx), передавая даты в качестве параметров. – GSerg

ответ

3

Кажется, проблема с логикой внутри правой функции. Пожалуйста, используйте ниже логику, я добавил функцию длины, чтобы правильно найти дату.

Set @SQLQuery = @SQLQuery + 'And (o.Date >= LEFT(''' + @Date + ''', charindex('','',''' + @Date+ ''') - 1)' 
+ ' AND o.Date <= RIGHT(''' + @Date + ''', len(''' + @Date+ ''') - charindex('','',''' + @Date+ '''))) ' 
1

изменить запрос к следующему типу:

Set @SQLQuery = @SQLQuery + А (o.Date> = LEFT (' '' + @date + ''», CHARINDEX ('', '' , '' '+ @ Date +' '') - 1) ' +' AND o.Date < = RIGHT ('' '+ @Date +' '', LEN ('' '+ @ Date +' '') - charindex ('', '', '' '+ @ Date +' ''))) '

+1

Спасибо за ваш ответ, это правильный ответ, и я проголосовал за это, я выбрал @BhatiaAshish как правильный ответ, даже если вы ответили на тот же ответ ** до **, потому что ваш ответ неправильно отформатирован. Посмотрите, как [ответить] (http://stackoverflow.com/help/how-to-answer) – user3378165

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