SQL-select-Abfrage für einen bestimmten Tag
Meine Tabelle sieht wie folgt aus
tbPatientEpisode
EpisodeIDP int
EpisodeNumber varcher
EpisodeDate datetime
wenn Sie versuchen, mit der folgenden SQL-Abfrage
SELECT * FROM tbPatientEpisode
es mir zeigen Ergebnisse wie unten Bild..
möchte ich, dass Daten für bestimmte Datum wie 2013-01-22 für diese versuchte ich unter SQL-Abfrage
SELECT * FROM tbPatientEpisode where EpisodeDate like '%2013-01-22%'
aber es hat nicht wieder jede Zeile. was falsch mit meiner Abfrage oder ist es eine richtige Weg, um diese Art von Ergebnis..jede Hilfe zu schätzen wissen.
- verwenden Sie nicht wie auf date Spalten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil deine Spalte
EpisodeDate
ist datetime-Typ aus.Sie wirken könnte
EpisodeDate
zu datetime, aber es wird verhindert, dass über Indizes, die auf Ihre Spalte, also am besten Weg den ich kenne ist der VergleichEpisodeDate
mit zwei datetimes:Ich erkläre ein bisschen:
Erste, Sie vergleichen könnte EpisodeDate string ohne Umwandlung und verlassen Sie sich auf implizite SQL Server-Konvertierung, aber Sie sollten sich bewusst sein, von zwei Dingen:
varchar
geringere priorty alsdatetime
, aber es könnte verhindern, dass die Verwendung von Indizes, wenn, zum Beispiel, Ihre Spalte istvarchar
und Sie möchten, vergleichen Sie es mitdatetime
.So ist es Ihr Fall, Sie könnte verwenden
aber Sie müssen sicherstellen, dass Sie wissen, was Sie tun
Habe ich nicht angegeben
dateadd(day, 1, '20130122')
und nicht'20130123'
weil ich denken werde 20130122 als input-Parameter, so können Sie ersetzen Sie diese Zeichenfolge in meiner AbfrageNicht verwenden, wie auf date-Spalten, es ist nicht zur Arbeit gehen.
Statt (SQL Server 2008):
Hinweis: dieses Formular nicht verwenden anwendbaren index beginnend mit Spalte
EpisodeDate
Wenn Sie möchten, um sicherzustellen, dass alle gültigen index verwenden (und arbeitet auf SQL-Server 2005):
@Mitch Wheat
es mir Warnung wieType date is not a defined system type.
.DATE
ist (afaik) nicht um eine Art, die in SQL Server 2005.basiert auf der Ausführung plan, mithilfe von LIKE-system konvertieren der Spalte Typ VARCHAR nur dann durchführen, scan -
Warum gibt es kein Ergebnis zurück, die in der Abfrage? dies liegt daran, dass system ist bereits konvertiert datetime zu nvarchar, das ist so etwas wie Jan 22 2013 10:55AM
und das ist, warum gibt es kein Ergebnis zurück
versuchen, ändern Sie Ihre Abfrage, um
sollte dies funktionieren, und unten sind alternative Weise verwenden MÖCHTEN, werfen Sie Ihre episodeDate bestimmten format wie '2013-01-22'
endlich ich hoffe, meine Erklärung konnte helfen u zu verstehen, was genau Los ist, aufm Bruder =)
Diese Antwort versuchen zu erklären, warum
EpisodeDate like '%2013-01-22%'
Lösung funktioniert nicht, was kann man tun, um gewünschte Ergebnisse mitlike ...
(empfehle ich nicht) und, schließlich, habe ich zwei Lösungen (mit und ohne implizite Konvertierungen). Alle Abfragen ausgeführt werden können auf AdventureWorks2008R2-Beispieldatenbank:Ausführungsplan:
Ausführungsplan:
Ausführungsplan:
{d '2005-11-20'}
istdatetime
:SELECT SQL_VARIANT_PROPERTY({d '2005-11-20'}, 'BaseType')
.