Setel bidang database DateTime ke "Sekarang"

94

Dalam kode VB.net, saya membuat permintaan dengan parameter SQL. Jika saya menetapkan parameter DateTime ke nilai DateTime. Sekarang, seperti apa permintaan saya?

UPDATE table SET date = "2010/12/20 10:25:00";

atau

UPDATE table SET date = GETDATE();

Dalam kasus pertama, saya yakin bahwa setiap record akan disetel ke waktu yang sama persis. Dalam kasus kedua itu tergantung pada bagaimana DBMS memproses permintaan tersebut. Yang membawa saya ke pertanyaan kedua: apakah SQL Server menyetel tanggal dan waktu yang sama saat memperbarui tabel besar dengan NOW ()?

EDIT: diganti SEKARANG () (yang tidak ada di SQL Server) dengan GETDATE ().

Thibault Witzig
sumber

Jawaban:

173

Di SQL, Anda perlu menggunakan GETDATE():

UPDATE table SET date = GETDATE();

Tidak ada NOW()fungsi.


Untuk menjawab pertanyaan Anda:

Dalam tabel besar, karena fungsi dievaluasi untuk setiap baris, Anda akan mendapatkan nilai yang berbeda untuk bidang yang diperbarui.

Jadi, jika kebutuhan Anda adalah mengatur semuanya ke tanggal yang sama, saya akan melakukan sesuatu seperti ini (belum teruji):

DECLARE @currDate DATETIME;
SET @currDate = GETDATE();

UPDATE table SET date = @currDate;
Oded
sumber
Ups ya SEKARANG () adalah Mysql, maaf. Tapi pertanyaannya tetap ada.
Thibault Witzig
Ok terima kasih. Jadi saya harus memastikan untuk memasukkan tanggal sebenarnya (dari kode) dalam permintaan saya dans bukan GETDATE () Apakah Anda tahu itu mengatur SQLparameter ke DateTime. Sekarang akan melakukan ini atau Jika saya harus mengonversi tanggal menjadi string dan kemudian menambahkannya ke permintaan?
Thibault Witzig
@@ Thibault Witzig - Anda bisa. Atau Anda dapat menggunakan SQL yang telah saya posting (masukkan tanggal sekarang ke dalam variabel dan gunakan variabel untuk mengatur tanggal di tabel - nilai dalam variabel tidak akan berubah).
Oded
Jika Anda ingin mempertahankan waktu yang sama untuk semua record, teruskan Now in sebagai parameter menggunakan Parameterized SQL. Dengan begitu, Anda tidak perlu khawatir tentang penguraian string atau masalah pemformatan string data yang dilokalkan.
Jim Wooley
20

Alternatif untuk GETDATE () adalah CURRENT_TIMESTAMP. Melakukan hal yang persis sama.

Don Simon
sumber
7
CURRENT_TIMESTAMPsebenarnya adalah Standar SQL sehingga beberapa orang mungkin berpendapat ini adalah sintaks yang lebih disukai.
Tony L.
Ini sangat salah. Saya baru saja membaca dokumen tentang keduanya dan tampak jelas bagi saya bahwa itu bukan "hal yang persis sama". Pertanyaan ini menawarkan penjelasan yang lebih rinci untuk ini: stackoverflow.com/questions/7105093/…
Mladen B.
7

Gunakan GETDATE ()

Mengembalikan stempel waktu sistem database saat ini sebagai nilai datetime tanpa offset zona waktu database. Nilai ini berasal dari sistem operasi komputer yang menjalankan contoh SQL Server.

UPDATE table SET date = GETDATE()
Adriaan Stander
sumber