将货币值(如 1.223.01)转换为十进制
Converting a monetary value like 1.223.01 to decimal
我有一个像 1.223.01
这样的货币价值,但它存储为 varchar
所以它真的像 '1.223.01'
.
我需要将其转换为 decimal
,以便我可以对其进行一些计算。
我试过的是
SELECT Convert(decimal(18,2), '1.223.01') AS test
但是我得到一个转换错误。
如何转换?
您没有指定输出应该是什么,所以您需要 1223.01
或 122301.00
。
因此,使用一些基本的字符串操作,您可以获得这两个值:
DECLARE @val AS VARCHAR(20) = '1.223.01'
-- remove all decimal points
SET @val = REPLACE(@val, '.', '')
-- convert value without decimals to get 122301.00
SELECT CONVERT(decimal(18,2), @val) AS TestValue
-- add a decimal point before the last 2 digits to get 1223.01
SELECT CONVERT(decimal(18,2), LEFT(@val,LEN(@val) - 2) + '.' +
RIGHT(@val, 2)) AS TestValue
这假设存储的值总是有一个小数点,小数点后有 2 位数字。
如果需要,两者都可以在一个 SELECT
中完成,方法是将 REPLACE(@val, '.', '')
替换为 2 个查询中 @val
的位置。
DECLARE @val AS VARCHAR(20) = '1.223.01'
SELECT CONVERT(DECIMAL(18, 2), REPLACE(@val, '.', '')) AS TestValue
SELECT CONVERT(DECIMAL(18, 2), LEFT(REPLACE(@val, '.', ''),
LEN(REPLACE(@val, '.', '')) - 2) + '.'
+ RIGHT(REPLACE(@val, '.', ''), 2)) AS TestValue
我从没听说过这种格式。听起来你有一个 varchar 而不是 money 类型。以下是您如何操作它。
首先删除所有句点。然后除以 1 向 sql-server 解释这是一个数字。然后乘以.01变成十进制数
SELECT
replace(value, '.', '')/1*.01
FROM (values('1.223.01'),('1.111.223.75'),('0.01')) x(value)
结果:
1223.01
1111223.75
0.01
我有一个像 1.223.01
这样的货币价值,但它存储为 varchar
所以它真的像 '1.223.01'
.
我需要将其转换为 decimal
,以便我可以对其进行一些计算。
我试过的是
SELECT Convert(decimal(18,2), '1.223.01') AS test
但是我得到一个转换错误。
如何转换?
您没有指定输出应该是什么,所以您需要 1223.01
或 122301.00
。
因此,使用一些基本的字符串操作,您可以获得这两个值:
DECLARE @val AS VARCHAR(20) = '1.223.01'
-- remove all decimal points
SET @val = REPLACE(@val, '.', '')
-- convert value without decimals to get 122301.00
SELECT CONVERT(decimal(18,2), @val) AS TestValue
-- add a decimal point before the last 2 digits to get 1223.01
SELECT CONVERT(decimal(18,2), LEFT(@val,LEN(@val) - 2) + '.' +
RIGHT(@val, 2)) AS TestValue
这假设存储的值总是有一个小数点,小数点后有 2 位数字。
如果需要,两者都可以在一个 SELECT
中完成,方法是将 REPLACE(@val, '.', '')
替换为 2 个查询中 @val
的位置。
DECLARE @val AS VARCHAR(20) = '1.223.01'
SELECT CONVERT(DECIMAL(18, 2), REPLACE(@val, '.', '')) AS TestValue
SELECT CONVERT(DECIMAL(18, 2), LEFT(REPLACE(@val, '.', ''),
LEN(REPLACE(@val, '.', '')) - 2) + '.'
+ RIGHT(REPLACE(@val, '.', ''), 2)) AS TestValue
我从没听说过这种格式。听起来你有一个 varchar 而不是 money 类型。以下是您如何操作它。
首先删除所有句点。然后除以 1 向 sql-server 解释这是一个数字。然后乘以.01变成十进制数
SELECT
replace(value, '.', '')/1*.01
FROM (values('1.223.01'),('1.111.223.75'),('0.01')) x(value)
结果:
1223.01
1111223.75
0.01