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:
Die Standardkonvertierung von Datum und Uhrzeit in Zeichenfolge ist Typ 0 (, 100). Dies ist Mon TT TT JJJJ HH: MiAM (oder PM).
Wenn Sie ein solches Datum in der Datenbank haben:
2015-06-01 11:52:59.057
und Sie machen Fragen wie diese:
select * from wws_invoice where invdate like 'Jun%'
select * from wws_invoice where invdate like 'Jun 1%'
select * from wws_invoice where invdate like 'Jun 1 %'
select * from wws_invoice where invdate like 'Jun 1 2015:%'
select * from wws_invoice where invdate like 'Jun ? 2015%'
...
select * from wws_invoice where invdate like 'Jun 1 2015 11:52AM'
Du bekommst diese Reihe.
Dieses Datumsformat deutet jedoch darauf hin, dass es sich um ein DateTime2 handelt. In der Dokumentation heißt es dann:
21 oder 121 - Kanonischer ODBC-Standard (mit Millisekunden) für Uhrzeit, Datum, Datum / Uhrzeit2 und Datum / Uhrzeit-Versatz. - JJJJ-mm-TT hh: mi: ss.mmm (24h)
Das macht es einfacher und Sie können verwenden:
select * from wws_invoice where invdate like '2015-06-01%'
und erhalten Sie den Rechnungsdatensatz. Hier ist ein Demo-Code:
DECLARE @myDates TABLE (myDate DATETIME2);
INSERT INTO @myDates (myDate)
VALUES
('2015-06-01 11:52:59.057'),
('2015-06-01 11:52:59.054'),
('2015-06-01 13:52:59.057'),
('2015-06-01 14:52:59.057');
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01%';
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01 11%';
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01 11:52:59%';
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01 11:52:59.054%';
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:
select * from record
where register_date >= '20091010' and register_date < '20091011';