将数据类型从 NVARCHAR 更改为 DECIMAL 不起作用
Changing the data type from NVARCHAR to DECIMAL is not working
我有一个计算,从中得到 ('/') 或 ('*')。这保存在变量“@op”中。问题是,由于转换问题,我无法用它做一些计算,所以我将这些值与我来自“@op”的值一起转换。结果的数据类型为 NVARCHAR。
问题是,我没有得到正确的结果?!可能选角没用...
一般来说,我无法从数据类型为 NVARCHAR 的变量“@Factor”生成十进制值。在这里你可以看到我试过的 cast 命令:
SET @Factor = (SELECT(CAST(@Factor as Decimal(18,6))))
因为那是行不通的,也许是因为点,我试图得到点之前和之后的部分,以不同的方式投射它,但不幸的是出现了错误的结果...
我正在使用 SQL Server Managing Studio v17.7
DECLARE @Factor NVARCHAR(20)
DECLARE @op NVARCHAR(20)
DECLARE @num3 FLOAT
SET @num3 = 1.0
SET @op = (SELECT dbo.CalculateFactor1())
SET @Factor = 'SELECT ' + CAST(@num3 AS nvarchar(20)) + @op + CAST(RAND() AS nvarchar(20))
EXEC sp_executesql @Factor -- random factor
DECLARE @test0 NVARCHAR(20)
DECLARE @test1 NVARCHAR(20)
DECLARE @test2 NVARCHAR(20)
DECLARE @test3 NVARCHAR(20)
DECLARE @test4 NVARCHAR(20)
SET @test1 = '0.123456'
SET @test2 = LEFT(@test1, CHARINDEX('.', @test1) - 1) -- gives me the part in front of the comma
SELECT @test2
SET @test3 = SUBSTRING(@test1,(CHARINDEX('.',@test1)+1),7) -- gives me the part after the comma
SELECT @test3
SET @test4 = LEFT(@test1, CHARINDEX('.', @test1) - 1) + '.' + SUBSTRING(@test1,(CHARINDEX('.',@test1)+1),6) -- gives me the complete number
SELECT @test4
SET @test0 = (SELECT(CAST(LEFT(@test1, CHARINDEX('.', @test1) - 1) + '.' + SUBSTRING(@test1,(CHARINDEX('.',@test1)+1),6) AS DECIMAL(18,6))))
SELECT @test0
DECLARE @solution DECIMAL
SET @solution = @test0 * 200.0
SELECT @solution
-- result is 20
-- expected result 24.6912
需要明确
DECLARE @solution DECIMAL(18,6)
SET @solution = cast(@test0 as decimal(18,6)) * 200.0
SELECT @solution
我有一个计算,从中得到 ('/') 或 ('*')。这保存在变量“@op”中。问题是,由于转换问题,我无法用它做一些计算,所以我将这些值与我来自“@op”的值一起转换。结果的数据类型为 NVARCHAR。
问题是,我没有得到正确的结果?!可能选角没用...
一般来说,我无法从数据类型为 NVARCHAR 的变量“@Factor”生成十进制值。在这里你可以看到我试过的 cast 命令:
SET @Factor = (SELECT(CAST(@Factor as Decimal(18,6))))
因为那是行不通的,也许是因为点,我试图得到点之前和之后的部分,以不同的方式投射它,但不幸的是出现了错误的结果...
我正在使用 SQL Server Managing Studio v17.7
DECLARE @Factor NVARCHAR(20)
DECLARE @op NVARCHAR(20)
DECLARE @num3 FLOAT
SET @num3 = 1.0
SET @op = (SELECT dbo.CalculateFactor1())
SET @Factor = 'SELECT ' + CAST(@num3 AS nvarchar(20)) + @op + CAST(RAND() AS nvarchar(20))
EXEC sp_executesql @Factor -- random factor
DECLARE @test0 NVARCHAR(20)
DECLARE @test1 NVARCHAR(20)
DECLARE @test2 NVARCHAR(20)
DECLARE @test3 NVARCHAR(20)
DECLARE @test4 NVARCHAR(20)
SET @test1 = '0.123456'
SET @test2 = LEFT(@test1, CHARINDEX('.', @test1) - 1) -- gives me the part in front of the comma
SELECT @test2
SET @test3 = SUBSTRING(@test1,(CHARINDEX('.',@test1)+1),7) -- gives me the part after the comma
SELECT @test3
SET @test4 = LEFT(@test1, CHARINDEX('.', @test1) - 1) + '.' + SUBSTRING(@test1,(CHARINDEX('.',@test1)+1),6) -- gives me the complete number
SELECT @test4
SET @test0 = (SELECT(CAST(LEFT(@test1, CHARINDEX('.', @test1) - 1) + '.' + SUBSTRING(@test1,(CHARINDEX('.',@test1)+1),6) AS DECIMAL(18,6))))
SELECT @test0
DECLARE @solution DECIMAL
SET @solution = @test0 * 200.0
SELECT @solution
-- result is 20
-- expected result 24.6912
需要明确
DECLARE @solution DECIMAL(18,6)
SET @solution = cast(@test0 as decimal(18,6)) * 200.0
SELECT @solution