Truy vấn sau không cập nhật trường ngày giờ:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Tôi cũng đã thử nó mà không có dấu gạch ngang, nhưng điều đó cũng không hoạt động.
Truy vấn sau không cập nhật trường ngày giờ:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Tôi cũng đã thử nó mà không có dấu gạch ngang, nhưng điều đó cũng không hoạt động.
EndDate
cột là gì?
Câu trả lời:
Khi nghi ngờ, hãy trình bày rõ ràng về việc chuyển đổi kiểu dữ liệu bằng CAST / CONVERT :
UPDATE TABLE
SET EndDate = CAST('2009-05-25' AS DATETIME)
WHERE Id = 1
Thông thường, nó sẽ hoạt động.
Nhưng bạn có thể thử điều này? Tôi không có SQL trên PC tại nhà, tôi không thể tự thử
UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1
Chuỗi ký tự được phân biệt theo cài đặt định dạng ngày hiện tại, xem SET DATEFORMAT
. Một định dạng sẽ luôn hoạt động là định dạng '20090525'.
Bây giờ, tất nhiên, bạn cần phải xác định 'không hoạt động'. Không có hồ sơ nào được cập nhật? Có lẽ Id=1
không phù hợp với bất kỳ kỷ lục nào ...
Nếu nó cho biết 'Một bản ghi đã được thay đổi' thì có lẽ bạn cần cho chúng tôi biết cách bạn xác minh ...
SET DATEFORMAT
thực sự hiệu quả khi viết SQL cho các môi trường có các bản địa hóa khác nhau
Sử dụng tham số DateTime là cách tốt nhất. Tuy nhiên, nếu bạn vẫn muốn chuyển DateTime dưới dạng một chuỗi, thì CAST sẽ không cần thiết với điều kiện sử dụng định dạng bất khả tri ngôn ngữ.
ví dụ
Cho một bảng được tạo như:
create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())
Những điều sau sẽ luôn hoạt động:
update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic
Những điều sau sẽ hoạt động:
SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1
Tuy nhiên, điều này sẽ không:
SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1
Điều này là do 'YYYY-MM-DD' không phải là một định dạng bất khả tri ngôn ngữ (theo quan điểm của máy chủ SQL).
Định dạng ISO 'YYYY-MM-DDThh: mm: ss' cũng là định dạng bất khả tri về ngôn ngữ và hữu ích khi bạn cần vượt qua khoảng thời gian khác 0.
Thông tin thêm: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
UPDATE TABLE
SET EndDate = CAST('2017-12-31' AS DATE)
WHERE Id = '123'
Nếu bạn không quan tâm đến việc chỉ định thời gian, bạn cũng có thể sử dụng định dạng ' DD / MM / YYYY ', tuy nhiên, tôi sẽ gắn bó với Chuyển đổi phương pháp và định dạng ISO liên quan của nó, vì bạn thực sự nên tránh sử dụng các giá trị mặc định.
Đây là một ví dụ:
SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126)
WHERE custID = 'F24'