Sql-Server

將帶有逗號作為小數點分隔符的字元串數值轉換為 NUMERIC(10, 2)

  • June 20, 2018

我有一個 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

引用自:https://dba.stackexchange.com/questions/118057