Sql-Server
將帶有逗號作為小數點分隔符的字元串數值轉換為 NUMERIC(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
,無論它是逗號、句點還是空格,所以先去掉它們。然後將逗號轉換成句點/小數,就大功告成了:SELECT CONVERT(NUMERIC(10, 2), REPLACE( REPLACE('7.000,45', '.', ''), ',', '.' ) ) AS [Converted];
回報:
7000.45
為了完整起見,我應該提到我也嘗試過:
SET LANGUAGE Greek;
- 查看CONVERT的各種格式樣式,但此處不適用。
- FORMAT函式,但輸入類型必須是數字或日期/時間/日期時間值(它是在 SQL Server 2012 中引入的,因此不適用於 SQL Server 2008 R2 或更早版本)。
似乎沒有其他任何工作。我希望找到比兩個
REPLACE
電話更優雅的東西,但到目前為止還沒有這樣的運氣。另外,順便提一下,雖然不是純 T-SQL 解決方案,但也可以通過 SQLCLR 完成。而且,在SQL#庫(我編寫的)中有一個預先完成的函式,名為String_TryParseToDecimal。此功能在免費版本中可用,並且適用於從 SQL Server 2005 開始的每個 SQL Server 版本:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
回報:
7000.45000000000000000000