我有一个varchar列的SQL表,其中包含希腊格式的数字(。如千分隔符和逗号为十进制分隔符)
经典转换
CONVERT(numeric(10,2),REPLACE([value],',','.'))不工作是因为。(千分隔符)杀死转换。
例如,尝试
CONVERT(numeric(10,2),REPLACE('7.000,45',',','.'))我想将这些值转换为数字(10,2)
对如何处理它有什么建议吗?
发布于 2015-10-14 19:16:28
(如果您使用的是Server 2012或更高版本,请参阅@wBob的回答以获得更清晰的方法。仅当您使用Server 2008 R2或更高版本时,才需要下面的答复中概述的方法。)
在转换为NUMERIC时,您不需要(或想要)数千个分隔符,无论是逗号、句号还是空格,所以先去掉它们。然后将逗号转换为句点/小数点,您就完成了:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];返回:
7000.45为了完整起见,我应该指出,我也尝试过:
SET LANGUAGE Greek;其他的似乎都没有用。我希望能找到比两个REPLACE调用更优雅的东西,但到目前为止还没有这样的运气。
另外,尽管不是纯T解决方案,但这也可以通过SQLCLR实现。而且,在我编写的SQL#库(我编写的)中有一个预先完成的函数,名为String_TryParseToDecimal。此函数可在免费版本中使用,并适用于Server 2005开始的每个Server版本:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');返回:
7000.45000000000000000000发布于 2015-10-14 22:14:53
发布于 2018-05-30 16:16:14
以下代码适用于我的情况:
select convert(varchar,FORMAT(123456789.0258,'###,###,###.00','de-de'))产出: 123.456.789,03
https://dba.stackexchange.com/questions/118057
复制相似问题