1

在使用德语表示与英语表示不同的值时,我在使用 SQL Server 2005 和 SQL Server 2008 时遇到了一些问题。服务器和操作系统以德语版本运行。

SET LANGUAGE deutsch;
SELECT 
    CONVERT(datetime, '31. Dezember 1999') as a, 
    CONVERT(nvarchar, CONVERT(datetime, '31. Dezember 1999')) as b, 
    CONVERT(float,'3.14159') as p,
    CONVERT(nvarchar, CONVERT(float,'3.14159')) as q;

管理控制台中的输出是这样的:

a=1999-12-31 00:00:00.000   
b=Dez 31 1999 12:00AM
c=3,14159   
d=3.14159
dateformat=dmy

这是不一致的。在 (a) 中,1999 年 12 月 31 日的德语表示被正确解析和显示(并且只有德语作品..)。使用 CONVERT 显式转换相同的日期会返回一个字符串,该字符串将英语日期格式与德语缩写月份名称混合在一起(如果仔细观察,它会显示“Dez 31”而不是“Dec 31”)。

但是 p 从英文表示法(小数点)的字符串转换为浮点数,但以德文表示法(使用十进制逗号)显示,而显式转换为 nvarchar再次产生英文表示法的数字。OTOH CONVERT() 不接受以德语表示法输入以转换为浮点数。

所以,我有一个 CONVERT 函数:

  1. 它仅接受用于转换为德语表示法的日期时间的字符串。
  2. 但只接受字符串转换为英文浮动。
  3. 并将 datetime 值转换为 nvarchar 混合German 和 English
  4. 将浮点值转换为英语

但我需要的是 SQL Server 2005、2008 中的一个函数,它将文本从当前用户语言转换为支持类型的值(日期时间、浮点数......)并将这些值转换回相对于当前用户的文本表示语。

这是什么功能?

4

1 回答 1

1

设置语言

[s] 指定会话的语言环境。会话语言确定日期时间格式和系统消息。

设置CONVERT函数120的样式参数支持与语言无关的转换。

至于浮点值的转换,看看这些 问题

通常,您应该避免在数据库中使用特定于语言的格式,并在 UI 中实现它。

于 2012-07-09T20:12:06.047 回答