作为一个有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))
首先,数字组分隔符被移除,然后小数点从逗号变为点。这样做是可行的,但是否稳定等还需考虑。
感谢评论和答案!
TRY_PARSE
是SQL Server 2012的一个新功能。 - marc_s