我需要在SQL服务器计算机上的单个数据库上将日期格式从US(mm / dd / YYYY)更改为UK(dd / mm / YYYY)。
如何做到这一点?
我已经看到为整个系统执行此操作的语句,以及为会话执行此操作的语句,但我现在无法更改代码,因为它必须再次通过QA,所以我需要快速修复更改日期时间格式。
更新
我意识到日期时间与SQL Server存储数据的方式无关,但它与解析查询的方式有很大关系。
我正在将XML文件中的原始数据放入数据库中。 XML文件中的日期采用英国日期格式。
答案 0 :(得分:21)
您可以使用 SET DATEFORMAT ,就像在此示例中一样
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
解析XML数据时,需要在代码中指定dateformat
答案 1 :(得分:11)
为了避免处理这些非常无聊的问题,我建议您始终使用标准且唯一的SQL / ISO日期格式解析您的数据,即YYYY-MM-DD。无论主服务器或查询客户端上的日期参数是什么(本地日期设置可能与主服务器设置不同),您的查询将在国际范围内工作!
答案 2 :(得分:4)
虽然您无法为单个数据库设置默认日期格式,但您可以更改用于访问此数据库的登录的默认语言:
ALTER LOGIN your_login WITH DEFAULT_LANGUAGE=British
在某些情况下,它会有所帮助。
答案 3 :(得分:3)
您只能更改整个服务器上的语言,而不能更改单个数据库。但是,如果您需要支持UK,则可以在所有输入和输出之前运行以下命令:
set language 'british english'
或者,如果从应用程序输入数据时出现问题,您可能需要考虑通用输入类型,例如
1日 - 12月2008
答案 4 :(得分:0)
如果这确实是QA问题而您无法更改代码。在机器上设置新的服务器实例并将语言设置为“英国英语”
答案 5 :(得分:-1)
您确实知道格式与SQL Server存储日期时间无关,对吧?
您可以为每个会话使用set dateformat
。没有数据库设置。
如果您使用参数进行数据插入或更新,或者使用过滤,则不会有任何问题。
答案 6 :(得分:-1)
使用:
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]
它正在100%工作。
答案 7 :(得分:-1)
对于SQL Server 2008,运行:
EXEC sp_defaultlanguage 'username', 'british'