di MySQL
select * from record where register_date like '2009-10-10%'
Apa sintaks di SQL Server?
di MySQL
select * from record where register_date like '2009-10-10%'
Apa sintaks di SQL Server?
DATETIME
nilai seperti string, dan mengapa itu bisa buruk untuk digunakan BETWEEN
atau >= AND <=
), lihat blog ini oleh Aaron Bertrand .
5
suara untuk tag operator-serupa . Bisakah saya dengan hormat meminta Anda menyarankan sql-like sebagai sinonim ?
Jawaban:
Anda dapat menggunakan fungsi DATEPART ()
SELECT * FROM record
WHERE (DATEPART(yy, register_date) = 2009
AND DATEPART(mm, register_date) = 10
AND DATEPART(dd, register_date) = 10)
Saya merasa cara ini mudah dibaca, karena mengabaikan komponen waktu, dan Anda tidak perlu menggunakan tanggal hari berikutnya untuk membatasi pilihan Anda. Anda dapat pergi ke perincian yang lebih besar atau lebih kecil dengan menambahkan klausa ekstra, menggunakan kode DatePart yang sesuai, misalnya
AND DATEPART(hh, register_date) = 12)
untuk mendapatkan rekaman yang dibuat antara 12 dan 1.
Lihat dokumen MSDN DATEPART untuk daftar lengkap argumen yang valid.
Tidak ada dukungan langsung untuk operator LIKE terhadap variabel DATETIME, tetapi Anda selalu dapat mentransmisikan DATETIME ke VARCHAR:
SELECT (list of fields) FROM YourTable
WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%'
Periksa dokumen MSDN untuk daftar lengkap "gaya" yang tersedia di fungsi CONVERT.
Marc
WHERE CONVERT(VARCHAR(25), register_date, 25) LIKE '2009-10-10%'
Jika Anda melakukan itu, Anda memaksanya untuk melakukan konversi string. Akan lebih baik untuk membuat rentang tanggal mulai / akhir, dan menggunakan:
declare @start datetime, @end datetime
select @start = '2009-10-10', @end = '2009-11-10'
select * from record where register_date >= @start
and register_date < @end
Ini akan memungkinkan untuk menggunakan indeks (jika ada register_date
), daripada pemindaian tabel.
Anda dapat menggunakan CONVERT untuk mendapatkan tanggal dalam bentuk teks. Jika Anda mengubahnya menjadi varchar (10), Anda dapat menggunakan = sebagai ganti like:
select *
from record
where CONVERT(VARCHAR(10),register_date,120) = '2009-10-10'
Atau Anda dapat menggunakan tanggal batas atas dan bawah, dengan keuntungan tambahan yang dapat menggunakan indeks:
select *
from record
where '2009-10-10' <= register_date
and register_date < '2009-10-11'
Sayangnya, tidak mungkin membandingkan datetime dengan varchar menggunakan 'LIKE' Tapi keluaran yang diinginkan dimungkinkan dengan cara lain.
select * from record where datediff(dd,[record].[register_date],'2009-10-10')=0
The LIKE
operator tidak bekerja dengan bagian-bagian tanggal seperti bulan atau tanggal tetapi DATEPART
operator yang tidak.
Perintah untuk mengetahui semua akun yang Open Date-nya pada tanggal 1:
SELECT *
FROM Account
WHERE DATEPART(DAY, CAST(OpenDt AS DATE)) = 1`
* CASTING OpenDt
karena nilainya masuk DATETIME
dan tidak adil DATE
.
Ada cakupan yang sangat tidak pasti dari operator LIKE untuk tanggal di SQL Server. Ini hanya berfungsi menggunakan format tanggal Amerika. Sebagai contoh Anda bisa mencoba:
... WHERE register_date LIKE 'oct 10 2009%'
Saya telah menguji ini di SQL Server 2005 dan berhasil, tetapi Anda benar-benar perlu mencoba kombinasi yang berbeda. Hal-hal aneh yang saya perhatikan adalah:
Anda sepertinya hanya mendapatkan semua atau tidak sama sekali untuk sub bidang yang berbeda dalam tanggal, misalnya, jika Anda mencari 'apr 2%' Anda hanya mendapatkan apa pun di bagian 20 - itu menghilangkan 2.
Menggunakan satu garis bawah '_' untuk mewakili satu karakter (wildcard) tidak sepenuhnya berfungsi, misalnya, tidakWHERE mydate LIKE 'oct _ 2010%'
akan mengembalikan semua tanggal sebelum tanggal 10 - sebenarnya tidak mengembalikan apa-apa!
Formatnya kaku Amerika: ' mmm dd yyyy hh:mm
'
Saya merasa sulit untuk menyelesaikan proses untuk MENYUKAI detik, jadi jika ada yang ingin melangkah lebih jauh, jadilah tamu saya!
Semoga ini membantu.
Saya agak terlambat ke utas ini tetapi sebenarnya ada dukungan langsung untuk operator sejenis di server MS SQL.
Seperti yang didokumentasikan dalam LIKE help jika tipe data bukan string, ia berusaha mengubahnya menjadi string. Dan seperti yang didokumentasikan dalam dokumentasi cast \ convert:
konversi datetime default ke string adalah tipe 0 (, 100) yang mon dd yyyy hh: miAM (atau PM).
Jika Anda memiliki tanggal seperti ini di DB:
2015-06-01 11:52:59.057
dan Anda melakukan kueri seperti ini:
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'
Anda mendapatkan baris itu.
Namun, format tanggal ini menunjukkan bahwa itu adalah DateTime2 , kemudian dokumentasinya mengatakan:
21 atau 121 - ODBC kanonis (dengan milidetik) default untuk time, date, datetime2, dan datetimeoffset. - tttt-bb-hh jj: mi: ss.mmm (24j)
Itu membuatnya lebih mudah dan Anda dapat menggunakan:
select * from wws_invoice where invdate like '2015-06-01%'
dan dapatkan catatan faktur. Berikut adalah kode 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%';
Melakukan pencarian datetime di SQL server tanpa konversi ke string selalu bermasalah. Mendapatkan setiap bagian tanggal adalah berlebihan (yang tidak mungkin menggunakan indeks). Mungkin cara yang lebih baik ketika Anda tidak menggunakan konversi string adalah dengan menggunakan pemeriksaan rentang. yaitu:
select * from record
where register_date >= '20091010' and register_date < '20091011';
Saya memecahkan masalah saya dengan cara itu. Terima kasih atas saran perbaikannya. Contoh di C #.
string dd, mm, aa, trc, data;
dd = nData.Text.Substring(0, 2);
mm = nData.Text.Substring(3, 2);
aa = nData.Text.Substring(6, 4);
trc = "-";
data = aa + trc + mm + trc + dd;
"Select * From bdPedidos Where Data Like '%" + data + "%'";