in MySQL
select * from record where register_date like '2009-10-10%'
Wie lautet die Syntax in SQL Server?
sql-server
sql-like
Paisal
quelle
quelle
DATETIME
Werte wie Zeichenfolgen zu behandeln und warum es schlecht sein kann, sie zu verwendenBETWEEN
oder>= AND <=
) finden Sie in diesem Blog von Aaron Bertrand .5
Stimmen für das Like-Operator- Tag. Könnte ich Sie bitten , SQL-like als Synonym vorzuschlagen ?Antworten:
Sie können die Funktion DATEPART () verwenden
Ich finde diesen Weg einfach zu lesen, da er die Zeitkomponente ignoriert und Sie das Datum des nächsten Tages nicht verwenden müssen, um Ihre Auswahl einzuschränken. Sie können zu mehr oder weniger Granularität wechseln, indem Sie zusätzliche Klauseln hinzufügen und den entsprechenden DatePart-Code verwenden, z
um Aufzeichnungen zwischen 12 und 1 zu bekommen.
Die vollständige Liste der gültigen Argumente finden Sie in den MSDN DATEPART-Dokumenten .
quelle
Es gibt keine direkte Unterstützung für den LIKE-Operator für DATETIME-Variablen, aber Sie können DATETIME jederzeit in ein VARCHAR umwandeln:
Überprüfen Sie die MSDN-Dokumente auf eine vollständige Liste der verfügbaren "Stile" in der CONVERT-Funktion.
Marc
quelle
WHERE CONVERT(VARCHAR(25), register_date, 25) LIKE '2009-10-10%'
Wenn Sie dies tun, erzwingen Sie eine Zeichenfolgenkonvertierung. Es wäre besser, einen Start- / Enddatumbereich zu erstellen und Folgendes zu verwenden:
Dadurch kann der Index (falls vorhanden
register_date
) anstelle eines Tabellenscans verwendet werden.quelle
Sie können CONVERT verwenden, um das Datum in Textform abzurufen. Wenn Sie es in einen Varchar (10) konvertieren, können Sie = anstelle von like verwenden:
Sie können auch ein Datum für die obere und untere Grenze verwenden, mit dem zusätzlichen Vorteil, dass ein Index verwendet werden kann:
quelle
Leider ist es nicht möglich, datetime mit 'LIKE' mit varchar zu vergleichen. Die gewünschte Ausgabe ist jedoch auf andere Weise möglich.
quelle
Sie können auch konvertieren verwenden, um das Datum mit LIKE durchsuchbar zu machen. Beispielsweise,
quelle
Der
LIKE
Bediener arbeitet nicht mit Datumsteilen wie Monat oder Datum, derDATEPART
Bediener jedoch.Befehl, um alle Konten herauszufinden, deren Öffnungsdatum am 1. war:
* CASTING,
OpenDt
weil es Wert istDATETIME
und nicht nurDATE
.quelle
Es gibt eine sehr flockige Abdeckung des LIKE-Operators für Daten in SQL Server. Es funktioniert nur im amerikanischen Datumsformat. Als Beispiel könnten Sie versuchen:
Ich habe dies in SQL Server 2005 getestet und es funktioniert, aber Sie müssen wirklich verschiedene Kombinationen ausprobieren. Seltsame Dinge, die mir aufgefallen sind, sind:
Sie scheinen nur alles oder nichts für verschiedene Unterfelder innerhalb des Datums zu erhalten. Wenn Sie beispielsweise nach "Apr 2%" suchen, erhalten Sie nur etwas in den 20er Jahren - es werden die 2er weggelassen.
Die Verwendung eines einzelnen Unterstrichs '_' zur Darstellung eines einzelnen (Platzhalter-) Zeichens funktioniert nicht vollständig. Beispielsweise
WHERE mydate LIKE 'oct _ 2010%'
werden nicht alle Daten vor dem 10. zurückgegeben - es wird überhaupt nichts zurückgegeben!Das Format ist starr amerikanisch: '
mmm dd yyyy hh:mm
'Ich habe es schwierig gefunden, einen Prozess für Sekunden festzunageln. Wenn also jemand etwas weiter gehen möchte, sei mein Gast!
Hoffe das hilft.
quelle
Ich bin etwas spät dran, aber tatsächlich gibt es eine direkte Unterstützung für den ähnlichen Operator in MS SQL Server.
Wie in der LIKE-Hilfe dokumentiert, wird versucht, den Datentyp in eine Zeichenfolge zu konvertieren, wenn es sich nicht um eine Zeichenfolge handelt. Und wie in der Dokumentation zu cast \ convert dokumentiert:
Wenn Sie ein solches Datum in der Datenbank haben:
und Sie machen Fragen wie diese:
Du bekommst diese Reihe.
Dieses Datumsformat deutet jedoch darauf hin, dass es sich um ein DateTime2 handelt. In der Dokumentation heißt es dann:
Das macht es einfacher und Sie können verwenden:
und erhalten Sie den Rechnungsdatensatz. Hier ist ein Demo-Code:
Das Durchführen von Datetime-Suchen in SQL Server ohne Konvertierung in eine Zeichenfolge war schon immer problematisch. Das Abrufen jedes Datumsteils ist ein Overkill (der wahrscheinlich keinen Index verwenden würde). Wenn Sie keine Zeichenfolgenkonvertierung verwenden, ist es wahrscheinlich besser, Bereichsprüfungen zu verwenden. dh:
quelle
Versuche dies
quelle
Ich habe mein Problem so gelöst. Vielen Dank für Verbesserungsvorschläge. Beispiel in C #.
quelle