2008-12-01 47 views
18

Tôi cần thay đổi định dạng ngày từ US (mm/dd/YYYY) sang UK (dd/mm/YYYY) trên một cơ sở dữ liệu trên máy chủ SQL.Thay đổi định dạng ngày tháng mặc định trên một cơ sở dữ liệu trong SQL Server

Làm cách nào để thực hiện điều này?

Tôi đã nhìn thấy các câu lệnh thực hiện điều này cho toàn bộ hệ thống và các phiên làm điều đó cho phiên, nhưng tôi không thể thay đổi mã ngay vì nó sẽ phải trải qua lại QA, vì vậy tôi cần nhanh chóng sửa để thay đổi định dạng ngày tháng.

Cập nhật

Tôi nhận ra rằng thời gian ngày không có gì để làm với cách SQL Server lưu trữ dữ liệu, nhưng nó có rất nhiều để làm với nó như thế nào phân tích truy vấn.

Tôi đang lấy dữ liệu thô từ tệp XML vào cơ sở dữ liệu. Các ngày trong tệp XML có định dạng ngày ở Vương quốc Anh.

Trả lời

20

Bạn có thể sử dụng SET DateFormat, như trong ví dụ này

declare @dates table (orig varchar(50) ,parsed datetime) 

SET DATEFORMAT ydm; 

insert into @dates 
select '2008-09-01','2008-09-01' 

SET DATEFORMAT ymd; 
insert into @dates 
select '2008-09-01','2008-09-01' 

select * from @dates 

Bạn sẽ cần phải xác định DateFormat trong mã khi bạn phân tích dữ liệu XML của bạn

+13

Điều đó thay đổi định dạng ngày SESSION, không phải là DATABASE. –

+1

@Y. Ecarri - vậy làm thế nào để thay đổi định dạng ngày DATABASE (không phải datetime)? Trong máy chủ SQL của tôi định dạng là yyyy-mm-dd tuy nhiên tôi cần mm/dd/yyyy vĩnh viễn. Hãy giúp tôi. – xameeramir

-1

Bạn nhận ra rằng định dạng không liên quan gì đến cách SQL Server lưu trữ datetime, đúng không?

Bạn có thể sử dụng set dateformat cho mỗi phiên. Không có thiết lập chỉ cho cơ sở dữ liệu.

Nếu bạn sử dụng các tham số để chèn hoặc cập nhật dữ liệu hoặc khi lọc, bạn sẽ không gặp bất kỳ sự cố nào với điều đó.

+0

Xem câu trả lời ở trên –

3

Bạn chỉ có thể thay đổi ngôn ngữ trên toàn bộ máy chủ chứ không thể thay đổi cơ sở dữ liệu riêng lẻ. Tuy nhiên, nếu bạn cần hỗ trợ Anh bạn có thể chạy lệnh sau đây trước khi tất cả đầu vào và đầu ra:

set language 'british english' 

Hoặc nếu bạn đang gặp vấn đề khi nhập datatimes từ ứng dụng của bạn, bạn có thể muốn xem xét một loại đầu vào phổ biến như

1-Tháng Mười Hai-2008

+1

Làm thế nào để thay đổi ngôn ngữ máy chủ sau đó? –

0

Nếu đây thực sự là một vấn đề bảo đảm chất lượng và bạn không thể thay đổi mã. Thiết lập phiên bản máy chủ mới trên máy và thiết lập ngôn ngữ là "Tiếng Anh của Anh"

10

Để tránh xử lý các vấn đề rất nhàm chán này, tôi khuyên bạn nên luôn phân tích dữ liệu của mình với ngày SQL/ISO chuẩn và độc đáo định dạng là YYYY-MM-DD. Truy vấn của bạn sau đó sẽ hoạt động trên phạm vi quốc tế, bất kể thông số ngày nào trên máy chủ chính của bạn hoặc trên máy khách truy vấn (nơi cài đặt ngày địa phương có thể khác với cài đặt máy chủ chính)!

+1

tiếc là tôi không tạo ra dữ liệu chỉ tiêu thụ nó. –

+6

Philippe - Tôi cũng bị thuyết phục về điều đó cho đến khi ai đó chỉ cho tôi một ví dụ trong SQL Server 2008 khi ngày được chỉ định là 2008-09-01 được dịch sang ngày 9 tháng 1 năm 2008 khi khu vực được đặt thành Hoa Kỳ. – kristof

+0

Theo quy tắc, tôi đang cố tránh sử dụng ngày ở định dạng chuỗi ở cấp cơ sở dữ liệu. Khi xử lý dữ liệu đầu vào, tôi sẽ truyền chuỗi này đến nay trên cấp ứng dụng bằng cách sử dụng các thiết lập miền địa phương thích hợp để nó đạt đến db trong kiểu ngày giờ. Bằng cách này, nó độc lập với các thiết lập cục bộ – kristof

-1

Sử dụng:

select * from mytest 
EXEC sp_rename 'mytest.eid', 'id', 'COLUMN' 
alter table mytest add id int not null identity(1,1) 
update mytset set eid=id 
ALTER TABLE mytest DROP COLUMN eid 

ALTER TABLE [dbo].[yourtablename] ADD DEFAULT (getdate()) FOR [yourfieldname] 

Nó hoạt động 100%.

-1

Đối với SQL Server 2008 chạy:

EXEC sp_defaultlanguage 'username', 'british' 
4

Mặc dù bạn không thể thiết lập định dạng ngày mặc định cho một cơ sở dữ liệu duy nhất, bạn có thể thay đổi ngôn ngữ mặc định cho một đăng nhập được sử dụng để truy cập vào cơ sở dữ liệu này:

ALTER LOGIN your_login WITH DEFAULT_LANGUAGE=British 

Trong một số trường hợp, tính năng này giúp ích.

Các vấn đề liên quan