SQL Server CAST / CONVERT 转换为数字与区域设置相关

3

作为一个有Oracle背景的人,我简直无法相信SQL Server对于这样一个微不足道的问题给了我这么大的麻烦。

我只想把一个varchar列中的数字解析到一个数字列中。问题是,数字不是美国风格的,而是德国风格的格式。也就是说,小数点和数字组分隔符被互换了。

例如:

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

我查阅了所有的MSDN文章,CAST不接受任何额外的参数。而CONVERT可以使用style参数,但似乎只适用于日期/时间和货币转换。此外,我找到了TRY_PARSE,它接受一个culture参数,但在2008版本中似乎还不可用。

我想出了一个拙劣的解决方案,但这肯定不是最好的方法!

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

首先,数字组分隔符被移除,然后小数点从逗号变为点。这样做是可行的,但是否稳定等还需考虑。

感谢评论和答案!


1
http://stackoverflow.com/questions/545575/how-can-i-convert-text-with-a-localized-number-format-into-a-number-in-ms-sql-se - Mitch Wheat
1
TRY_PARSE是SQL Server 2012的一个新功能。 - marc_s
3个回答

2

为了完整性 - 这里是PARSE的MSDN文档链接,包含代码示例和区域字符串表格,例如' en-US '表示美国英语,'de-DE'表示德语等...


2

很抱歉让您失望,但是是的,

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

这就是做到它的方法。

0

很抱歉这暂时对你没有帮助,但是SQL Server 2012有一个文化感知的PARSE函数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接