Đặt trường cơ sở dữ liệu DateTime thành “Bây giờ”


93

Trong mã VB.net, tôi tạo các yêu cầu với các tham số SQL. Tôi đã đặt một tham số DateTime thành giá trị DateTime. Bây giờ, yêu cầu của tôi sẽ như thế nào?

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

hoặc là

UPDATE table SET date = GETDATE();

Trong trường hợp đầu tiên, tôi chắc chắn rằng mọi kỷ lục sẽ được thiết lập vào cùng một thời điểm. Trong trường hợp thứ hai, nó phụ thuộc vào cách DBMS xử lý yêu cầu. Điều này dẫn tôi đến câu hỏi thứ hai: SQL Server có đặt cùng ngày và giờ khi cập nhật một bảng lớn với NOW () không?

EDIT: thay thế NOW () (không tồn tại trong SQL Server) bằng GETDATE ().

Câu trả lời:


172

Trong SQL, bạn cần sử dụng GETDATE():

UPDATE table SET date = GETDATE();

Không có NOW()chức năng nào .


Để trả lời câu hỏi của bạn:

Trong một bảng lớn, vì hàm được đánh giá cho mỗi hàng, nên bạn sẽ nhận được các giá trị khác nhau cho trường được cập nhật.

Vì vậy, nếu yêu cầu của bạn là đặt tất cả vào cùng một ngày, tôi sẽ làm điều gì đó như sau (chưa được kiểm tra):

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

UPDATE table SET date = @currDate;

Rất tiếc, có NOW () là Mysql, xin lỗi. Nhưng những câu hỏi vẫn còn.
Thibault Witzig

Được rồi cảm ơn. Vì vậy, tôi cần đảm bảo đặt ngày thực tế (từ mã) trong yêu cầu của tôi không phải GETDATE () Bạn có biết nó đặt SQLparameter thành DateTime. Bây giờ sẽ thực hiện điều này hoặc Nếu trước tiên tôi nên chuyển đổi ngày thành chuỗi và sau đó thêm nó vào yêu cầu?
Thibault Witzig

@@ Thibault Witzig - Bạn có thể. Hoặc bạn có thể sử dụng SQL mà tôi đã đăng (lấy ngày hiện tại vào một biến và sử dụng biến để đặt ngày trong bảng - giá trị trong biến sẽ không thay đổi).
Oded

Nếu bạn muốn giữ nguyên thời gian cho tất cả các bản ghi, hãy chuyển Now vào dưới dạng tham số bằng cách sử dụng Parameterized SQL. Bằng cách đó, bạn không phải lo lắng về các vấn đề phân tích cú pháp chuỗi hoặc định dạng chuỗi dữ liệu được bản địa hóa.
Jim Wooley,

20

Một thay thế cho GETDATE () là CURRENT_TIMESTAMP. Làm điều tương tự.


7
CURRENT_TIMESTAMPthực tế là Chuẩn SQL nên một số người có thể cho rằng đây là cú pháp ưu tiên.
Tony L.

Điều này là khá sai lầm. Tôi vừa đọc tài liệu về hai tài liệu đó và tôi thấy rõ ràng rằng những tài liệu đó không "giống hệt nhau". Câu hỏi này đưa ra lời giải thích chi tiết hơn cho điều này: stackoverflow.com/questions/7105093/…
Mladen B.

7

Sử dụng GETDATE ()

Trả về dấu thời gian của hệ thống cơ sở dữ liệu hiện tại dưới dạng giá trị ngày giờ mà không có độ lệch múi giờ cơ sở dữ liệu. Giá trị này bắt nguồn từ hệ điều hành của máy tính mà phiên bản SQL Server đang chạy.

UPDATE table SET date = GETDATE()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.