Sono un po 'in ritardo su questo thread, ma in realtà c'è il supporto diretto per l'operatore simile nel server MS SQL.
Come documentato nella guida LIKE, se il tipo di dati non è una stringa, si tenta di convertirlo in una stringa. E come documentato nella documentazione cast \ convert:
La conversione predefinita di datetime in stringa è di tipo 0 (, 100) che è lun gg aaaa hh: miAM (o PM).
Se hai una data come questa nel DB:
2015-06-01 11:52:59.057
e fai domande come questa:
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'
hai quella riga.
Tuttavia, questo formato di data suggerisce che si tratta di un DateTime2 , quindi la documentazione dice:
21 o 121: impostazione predefinita canonica ODBC (con millisecondi) per ora, data, datetime2 e datetimeoffset. - aaaa-mm-gg hh: mi: ss.mmm (24h)
Questo lo rende più facile e puoi usare:
select * from wws_invoice where invdate like '2015-06-01%'
e ottieni il record della fattura. Ecco un codice demo:
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%';
L'esecuzione di ricerche datetime nel server SQL senza alcuna conversione in stringa è sempre stata problematica. Ottenere ogni parte della data è eccessivo (che improbabilmente userebbe un indice). Probabilmente un modo migliore quando non usi la conversione di stringhe sarebbe usare i controlli di intervallo. cioè:
select * from record
where register_date >= '20091010' and register_date < '20091011';