SQL Server CAST / CONVERT特定于数字文化

时间:2012-05-31 08:56:57

标签: sql sql-server sql-server-2008 internationalization

来自Oracle背景我无法相信SQL Server如何让我如此难以接受这样一个微不足道的关注。

我只想将varchar列中的数字解析为数字列。问题是,数字不是美式风格,而是德式风格。这意味着,十进制标记和数字组分隔符互换。

示例:

1.767,13 equals one thousand and seven hundred ...

我仔细查看了每篇MSDN文章。 CAST不接受任何其他参数。 CONVERT可以采用样式,但似乎只适用于日期/时间和金钱转换。此外,我发现TRY_PARSE带有 culture 参数,但在2008版本中似乎尚未提供。

我想出了一个kludge解决方案,但那不可能!

cast(replace(replace([TOTALVALUE],'.',''), ',','.') as numeric(20,2))

首先删除数字组分隔符,然后将小数点从逗号更改为点。它有效,但它是否健壮等。

感谢您的评论和解答!

3 个答案:

答案 0 :(得分:2)

很抱歉让人失望,但是,

cast(replace(replace([TOTALVALUE],'.',''), ',','.') as numeric(20,2))

是这样做的方法。

答案 1 :(得分:0)

很抱歉这对您没有帮助,但SQL Server 2012具有文化感知功能PARSE

答案 2 :(得分:0)

为了完整性 - here是PARSE的MSDN文档的链接,带有代码示例和文化字符串表,即美国英语的“en-US”,德语的“de-DE”等等......