У меня есть строка в моей SQL хранимую процедуру, которая выглядит следующим образом (работает как намеченная):Как я могу использовать SQL BETWEEN для сравнения двух дат в строке для выполнения sp_executesql?
HAVING oh.startdate BETWEEN @startDate AND @endDate
Однако дальше у меня есть строка:
AND (oh.user IN (@userIDs))
Где @userIDs запятая разграничены строка идентификаторов и oh.user является INTEGER, поэтому я должен фактически поставить весь запрос SQL в динамическую строку (@sql) со всеми параметрами сцепленных в него, а затем использовать
sp_executesql @sql
Все не работает отлично, кроме между датами, я попробовал несколько способов, и продолжает получать ошибки или нет результатов возвращаются, когда должен быть:
HAVING oh.startdate BETWEEN CONVERT(DATETIME, '+LEFT(CONVERT(VARCHAR, @startDate, 120), 10)+', 120) AND CONVERT(DATETIME, '+LEFT(CONVERT(VARCHAR, @endDate, 120), 10)+', 120)
возвращает ничего.
HAVING oh.startdate '+LEFT(CONVERT(VARCHAR, @startDate, 120), 10)+' AND '+LEFT(CONVERT(VARCHAR, @endDate, 120), 10)+'
также ничего не возвращает.
HAVING oh.startdate BETWEEN ' + @startDate +' AND '+ @endDate +'
возвращает ошибку преобразования DATETIME в строку.
Любая помощь приветствуется.
Спасибо, Томас
можете ли вы опубликовать весь свой запрос, некоторые примеры данных и ожидаемые результаты? – Taryn
Какой тип вы используете для oh.startdate, @startDate и @endDate? –
и сообщите нам, какой формат даты используется. (например: '21 -jan-20012 'или '21/01/2012') –