Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将货币值(如1.223.01)转换为十进制_Sql Server_Tsql_Type Conversion - Fatal编程技术网

Sql server 将货币值(如1.223.01)转换为十进制

Sql server 将货币值(如1.223.01)转换为十进制,sql-server,tsql,type-conversion,Sql Server,Tsql,Type Conversion,我有一个类似于1.223.01的货币值,但它存储为varchar,因此它实际上类似于'1.223.01' 我需要把它转换成十进制,这样我可以对它做一些计算 我试过的是 SELECT Convert(decimal(18,2), '1.223.01') AS test 但我得到了一个转换错误 如何转换此值?您没有指定输出应该是什么,因此您需要的是1223.01或122301.00 因此,使用一些基本的字符串操作,您可以获得这两个值: DECLARE @val AS VARCHAR(20) = '

我有一个类似于
1.223.01
的货币值,但它存储为
varchar
,因此它实际上类似于
'1.223.01'

我需要把它转换成十进制,这样我可以对它做一些计算

我试过的是

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
这假设存储的值始终有一个小数点,后面有两位数字

如果需要,可以通过将两个查询中的
@val
位置替换为
REPLACE(@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而不是货币类型。下面是如何操作它

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

问题在于格式。在sql中,您没有1000点。删除该点后,该点将正常工作。:)是:
1223.01
还是
122301.00
?很抱歉,我需要澄清一下,我需要这么多细节,您存储为十进制,格式不重要。在调用
convert
之前,只需将句点替换为空字符串,我想我知道我在这里哪里出错了。