我在从数据库中的字符串转换日期时遇到问题(Ms SQl Server 2008),我找到了一个使用
的解决方案EXEC sp_defaultlanguage 'username', 'british'
在全球范围内根据当前数据和新数据将语言从美国英语改为英国英语会有什么危险?
答案 0 :(得分:2)
来自here:
每个SQL Server都有一个默认语言。你可以看到默认值 语言是通过执行这些命令(在查询分析器中)。
sp_configure ‘default language’
这将告诉您默认语言是什么(排序)。它 实际上返回一个config_value,其整数表示 语言ID。然后你可以运行......
sp_helplanguage
您将看到SQL Server支持的语言列表。奇怪的 这里的事情是服务器的语言设置不会解决您的问题 问题。此设置配置NEW用户的默认语言。 通过更改此设置,现有用户将继续拥有他们的 原始语言。这是它变得有趣的地方,因为它是 login的语言设置,用于确定SQL Server的日期格式。对于 例如,如果用户A的默认语言为us_english,则为日期 2006年4月4日将被解释为2006年4月4日。如果用户B有 默认语言为'British',则日期将被解释为 2006年6月6日。好消息是你可以改变默认值 用户的语言,以便后续登录将显示正确的 日期的解释。方法如下:您可以设置默认语言 通过发出以下命令为用户。
sp_defaultlanguage @loginame = ‘LoginName’, @language = ‘Language’
运行此命令后,您需要注销并重新登录 数据库以使更改生效。好消息是 语言设置只需要进行一次(对于每个用户) 数据库)。
答案 1 :(得分:1)
看看here
试试这个
select * from sys.syslanguages
语言设置非常涉及自动格式。特别是日期值和工作日的计算可能会导致差异。
转换日期文字时会遇到的大多数问题(正如您已经遇到的那样)。
我会不这样做。我更喜欢使用适当的格式。阅读this
看看这些例子
SET LANGUAGE ENGLISH;
DECLARE @d1 DECIMAL(10,2)=100.50;
SELECT FORMAT(@d1,'C')
,@@DATEFIRST
,DATEPART(WEEK,{d'2016-04-03'})
,FORMAT({d'2016-04-03'},'D');
--$100.50 | 7 | 15 | Sunday, April 3, 2016
SET LANGUAGE GERMAN;
DECLARE @d2 DECIMAL(10,2)=100.50;
SELECT FORMAT(@d2,'C')
,@@DATEFIRST
,DATEPART(WEEK,{d'2016-04-03'})
,FORMAT({d'2016-04-03'},'D');
--100,50 € | 1 | 14 | Sonntag, 3. April 2016
再一次:不要