来自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))
首先删除数字组分隔符,然后将小数点从逗号更改为点。它有效,但它是否健壮等。
感谢您的评论和解答!
答案 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”等等......