Làm cách nào để cập nhật trường DateTime trong T-SQL?


81

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.


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

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

bạn có gặp lỗi hay chỉ là không có kết quả?
Gratzy

Kiểu dữ liệu cho EndDatecột là gì?
OMG Ponies

Nó nói 1 hàng bị ảnh hưởng, nhưng khi tôi kiểm tra, ngày tháng không thay đổi.
Xaisoft

Câu trả lời:



33

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

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

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

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

11

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=1khô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 ...


Định dạng ngày là lý do tại sao tôi đã suy nghĩ là rõ ràng về việc chuyển đổi sẽ là một ý tưởng tốt ...
OMG Ngựa Non

Công cụ tốt Remus, SET DATEFORMATthự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
Matt R

Tuyệt vời! Điều này hiệu quả với tôi và giúp tôi tiết kiệm được một vài bước vì trường tôi đang chuyển đổi đã sử dụng định dạng này, tức là trước tiên không cần phải chuyển đổi nó sang ISO hoặc định dạng khác.
Roberto

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 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



2

Điều đó sẽ hoạt động, tôi sẽ đặt dấu ngoặc quanh [Ngày] vì nó là một từ khóa dành riêng.


2

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'


1

Có thể có một kích hoạt trên bàn đặt nó trở lại?


Tôi sẽ kiểm tra lại nó.
Xaisoft
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.