Ich habe eine Linie in meiner SQL gespeicherte Prozedur, die wie folgt aussieht (wie gewünscht funktioniert):Wie kann ich SQL BETWEEN verwenden, um zwei Datumsangaben in einer Zeichenfolge zu vergleichen, um sie in sp_executesql auszuführen?
HAVING oh.startdate BETWEEN @startDate AND @endDate
, jedoch weiter unten habe ich die Zeile:
AND (oh.user IN (@userIDs))
Wo @userIDs ist ein Komma getrennte Zeichenfolge von IDs und oh.user ist ein INTEGER, also muss ich tatsächlich die gesamte SQL-Abfrage in eine dynamische Zeichenfolge (@sql) mit allen Parametern setzen in sie verkettet und dann verwenden
sp_executesql @sql
Alles funktioniert gut, außer die zwischen diesen Zeitpunkten, habe ich ein paar Möglichkeiten ausprobiert und immer Fehler halten oder keine Ergebnisse zurückgegeben, wenn es sein sollte:
HAVING oh.startdate BETWEEN CONVERT(DATETIME, '+LEFT(CONVERT(VARCHAR, @startDate, 120), 10)+', 120) AND CONVERT(DATETIME, '+LEFT(CONVERT(VARCHAR, @endDate, 120), 10)+', 120)
kehrt nichts.
HAVING oh.startdate '+LEFT(CONVERT(VARCHAR, @startDate, 120), 10)+' AND '+LEFT(CONVERT(VARCHAR, @endDate, 120), 10)+'
gibt auch nichts zurück.
HAVING oh.startdate BETWEEN ' + @startDate +' AND '+ @endDate +'
kehrt Fehler DATETIME- auf String konvertieren.
Jede Hilfe wird geschätzt.
Danke, Thomas
können Sie Ihre gesamte Abfrage, einige Beispieldaten und Ihre erwarteten Ergebnisse veröffentlichen? – Taryn
Welchen Typ verwendest du für oh.startdate, @startDate und @endDate? –
und sagen Sie uns, welches Datumsformat verwendet wird. (ex: '21 -jan-20012 'oder '21/01/2012') –