将货币值转换为十进制,如1.223.01

时间:2015-02-12 10:54:10

标签: sql-server tsql type-conversion

我有一个货币值,如1.223.01,但它存储为varchar,所以它真的像'1.223.01'

我需要将其转换为decimal,以便对其进行一些计算。

我试过的是

SELECT Convert(decimal(18,2), '1.223.01') AS test

但是我收到转换错误。

我该怎么转换呢?

2 个答案:

答案 0 :(得分:1)

您尚未指定输出内容,因此您需要1223.01122301.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

答案 1 :(得分:1)

我从来没有听说过这种格式。听起来你有一个varchar而不是钱类型。以下是如何操纵它。

首先删除所有期间。然后除以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