di MySQL
select * from record where register_date like '2009-10-10%'
Apa sintaks di SQL Server?
sql-server
sql-like
Paisal
sumber
sumber
DATETIME
nilai seperti string, dan mengapa itu bisa buruk untuk digunakanBETWEEN
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
untuk mendapatkan rekaman yang dibuat antara 12 dan 1.
Lihat dokumen MSDN DATEPART untuk daftar lengkap argumen yang valid.
sumber
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
sumber
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.sumber
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'
sumber
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
sumber
Anda juga dapat menggunakan convert agar tanggal dapat dicari menggunakan LIKE. Sebagai contoh,
select convert(VARCHAR(40),create_date,121) , * from sys.objects where convert(VARCHAR(40),create_date,121) LIKE '%17:34%'
sumber
The
LIKE
operator tidak bekerja dengan bagian-bagian tanggal seperti bulan atau tanggal tetapiDATEPART
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 masukDATETIME
dan tidak adilDATE
.sumber
Coba ini
SELECT top 10 * from record WHERE IsActive = 1 and CONVERT(VARCHAR, register_date, 120) LIKE '2020-01%'
sumber
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:
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, tidak
WHERE 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.
sumber
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:
Jika Anda memiliki tanggal seperti ini di DB:
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:
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';
sumber
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 + "%'";
sumber