如何在SQL中将nvarchar转换为十进制

时间:2017-03-01 09:28:34

标签: sql sql-server-2008

如何在SQL Server中将nvarchar转换为十进制?

我需要将'38,716.1311'之类的值转换为38716.1311。

我尝试过使用此方法但无法成功转换:

DECLARE @TempValue NVARCHAR(100) = '38,716.1311'

SELECT 
    CONVERT(DECIMAL(18, 2), @TempValue) 

有人可以建议正确的查询吗?提前致谢

6 个答案:

答案 0 :(得分:3)

只需在转化前删除字符串中的逗号:

Select CONVERT(DECIMAL(18,2),replace('38,716.1311', ',', '')) 

答案 1 :(得分:1)

如果@TempValueMONEY则更好,因此忽略逗号分隔

Declare @TempValue MONEY =  '38,716.1311'
Select CAST(@TempValue AS DECIMAL(18,2))

答案 2 :(得分:0)

Declare @TempValue nvarchar(100)
    SET @TempValue = Replace('38,716.1311',',','')
Select cast(@TempValue AS DECIMAL(18,2)) 

- 我们无法转换价值像“38,716.1311”(NVARCHAR)到DECIMAL所以首先我们用空白“38716.1311”替换“,”然后用DECIMAL转换

答案 3 :(得分:0)

使用MONEY数据类型并转换为十进制数据类型:

DECLARE @Col MONEY = '38,716.1311'
SELECT CONVERT(DECIMAL(20,4),@Col) 

或替换逗号并转换为十进制

DECLARE @Col VARCHAR(100)  = '38,716.1311'
SELECT CONVERT(DECIMAL(20,4),REPLACE(@Col,',',''))

答案 4 :(得分:0)

使用REPLACE删除逗号,如下所示:

Declare @TempValue nvarchar = '38,716.1311'
Select CONVERT(DECIMAL(18,2), REPLACE(@TempValue, ',', ''))

答案 5 :(得分:0)

以我为例,一些数据例如:version: '1.2.12'

我想注册类似版本:Sql中的1.212

  1. 清理 varchar (消除点或逗号)

  2. 转换为 char (6位数字),并用0填充空格。 (通过合并将null捕获)

  3. 转换为数字并除以100000

  4. 十进制(10,4)

结果->> 1.212版

Select 'version'=cast(cast(replace(cast(replace(coalesce([##DATA##],'0'), '.', '') as char(6)),' ','0')as numeric(6))/100000 as decimal (10,4)

也许还有另一个更简单的解决方案。