2010-06-29 16 views
58

Các truy vấn sau đây không cập nhật các lĩnh vực datetime:Làm cách nào để cập nhật trường DateTime trong T-SQL?

update table 
SET EndDate = '2009-05-25' 
WHERE Id = 1 

Tôi cũng đã thử nó không có dấu gạch ngang, nhưng điều đó không làm việc, hoặc.

+1

là ngày tên cột thực tế? – Gratzy

+1

không thực sự, nó là EndDate, nhưng tôi chỉ rút ngắn nó thành Date. – Xaisoft

+0

bạn có gặp lỗi hoặc không có kết quả? – Gratzy

Trả lời

26

Thông thường, nó sẽ hoạt động.

Nhưng bạn có thể thử điều này không? Tôi không có SQL trên máy tính tại nhà của mình, tôi không thể thử bản thân mình

UPDATE table 
SET EndDate = '2009-05-25 00:00:00.000' 
WHERE Id = 1 
+1

Điều này làm việc, nhưng tôi đã thử nó trước đó mà không có tất cả các số không và nó đã không hoạt động. Tại sao? – Xaisoft

+0

Tôi đã thử nó với '2009-05-25 00: 02: 01.000', nhưng nó không hoạt động. – Xaisoft

+0

Tốt, nghiêm túc không có bất kỳ ý tưởng nào. Vì bạn đã viết mà không có thông tin về thời gian và SQL phải tự động đính kèm theo mặc định là 00: 00: 00.000. Vì vậy, nó phải được làm việc. –

1

Có thể kích hoạt trên bàn đặt lại không?

+0

Tôi sẽ kiểm tra kỹ. – Xaisoft

2

Điều đó có hiệu quả, tôi đặt dấu ngoặc vuông xung quanh [Ngày] vì đó là từ khóa dành riêng.

+3

Tên của nó thực sự là EndDate – Xaisoft

9

Chuỗi ký tự được xử lý theo cài đặt định dạng ngày hiện tại, xem SET DATEFORMAT. Một định dạng luôn hoạt động là '20090525'.

Bây giờ, tất nhiên, bạn cần 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 cứ hồ sơ ...

Nếu nó nói 'Một bản ghi thay đổi' thì có lẽ bạn cần phải cho chúng ta thấy làm thế nào bạn xác minh ...

+0

Id 1 không tồn tại. – Xaisoft

+0

Định dạng ngày là lý do tại sao tôi đang nghĩ rõ ràng về chuyển đổi sẽ là một ý tưởng hay ... –

+0

Công cụ tốt Remus, 'SET DATEFORMAT' thực sự hiệu quả khi viết SQL cho môi trường với các bản địa hóa khác nhau –

8

Sử dụng tham số DateTime là cách tốt nhất. Tuy nhiên, nếu bạn vẫn muốn vượt qua một DateTime như một chuỗi, thì CAST không cần thiết với điều kiện là một định dạng thuyết bất khả tri ngôn ngữ được sử dụ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()) 

Sau đây nên luôn luôn làm việc:

update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic 

Sau đây sẽ làm việc:

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à định dạng không phụ thuộc vào ngôn ngữ (từ quan điểm của máy chủ SQL).

Định dạng ISO 'YYYY-MM-DDThh: mm: ss' cũng là ngôn ngữ bất khả tri và hữu ích khi bạn cần vượt qua thời gian khác 0. Thông tin

thêm: http://www.karaszi.com/SQLServer/info_datetime.asp

1

Nếu bạn không quan tâm đến việc xác định một thời gian, bạn cũng có thể sử dụng định dạng 'DD/MM/YYYY', tuy nhiên tôi sẽ dính vào một Chuyển đổi phương pháp, và định dạng ISO có 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.

Dưới đây là một ví dụ:

SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126) WHERE custID = 'F24'

4
UPDATE TABLE 
    SET EndDate = CAST('2017-12-31' AS DATE) 
WHERE Id = '123' 
Các vấn đề liên quan