我有一个 varchar 列的 SQL 表,其中包含希腊格式的数字(。作为千位分隔符,逗号作为小数分隔符)
经典的转换
CONVERT(numeric(10,2),REPLACE([value],',','.'))
不起作用,因为 . (千位分隔符)终止转换
例如尝试
CONVERT(numeric(10,2),REPLACE('7.000,45',',','.'))
我想将这些值转换为数字(10,2)
关于如何处理它的任何建议?
我有一个 varchar 列的 SQL 表,其中包含希腊格式的数字(。作为千位分隔符,逗号作为小数分隔符)
经典的转换
CONVERT(numeric(10,2),REPLACE([value],',','.'))
不起作用,因为 . (千位分隔符)终止转换
例如尝试
CONVERT(numeric(10,2),REPLACE('7.000,45',',','.'))
我想将这些值转换为数字(10,2)
关于如何处理它的任何建议?
(如果您使用的是 SQL Server 2012 或更高版本,请参阅@wBob 的答案以获得更简洁的方法。仅当您使用 SQL Server 2008 R2 或更早版本时,才需要下面我的答案中概述的方法。)
转换为 时,您不需要(或不需要)千位分隔符
NUMERIC
,无论它是逗号、句点还是空格,所以先去掉它们。然后将逗号转换成句点/小数,就大功告成了:回报:
为了完整起见,我应该提到我也尝试过:
SET LANGUAGE Greek;
查看CONVERT的各种格式样式,但此处不适用。
FORMAT函数,但输入类型必须是数字或日期/时间/日期时间值(它是在 SQL Server 2012 中引入的,因此不适用于 SQL Server 2008 R2 或更早版本)。
似乎没有其他任何工作。我希望找到比两个
REPLACE
电话更优雅的东西,但到目前为止还没有这样的运气。另外,顺便提一下,虽然不是纯 T-SQL 解决方案,但也可以通过 SQLCLR 完成。而且,在SQL#库(我编写的)中有一个预先完成的函数,名为String_TryParseToDecimal。此功能在免费版本中可用,并且适用于从 SQL Server 2005 开始的每个 SQL Server 版本:
回报:
您使用的是什么版本的 SQL Server?从 SQL Server 2012 起,您可以使用TRY_PARSE及其
USING culture
参数。您也可以使用PARSE,如果转换失败,不同之处PARSE
将失败并TRY_PARSE
返回 aNULL
,例如高温高压
以下代码适用于我的情况:
输出:123.456.789,03