将数据变量转换为数字

问题描述 投票:0回答:2

示例数据:

12.12%,
6,
1,
10%,
8.347%,
16.27

SELECT CONVERT(decimal(10,3), [Discount]) AS [Discount]
FROM [RDMS_DEV].[dbo].[t_TNSDiscount_dtl]

错误:

将数据类型varchar转换为数字时出错。

预期成绩:

12.12%,
6%,
1%,
10%,
8.347%,
16.27%
sql-server decimal percentage numeric varchar
2个回答
1
投票

问题是您的数据,因为解决方案的'%'字符通过替换功能将其删除。

SELECT CONVERT(varchar(255),REPLACE([Discount], '%', '')) + '%' AS [Discount] 
FROM [RDMS_DEV].[dbo].[t_TNSDiscount_dtl]

你也可以使用CONVERT(十进制(10,3),[折扣])来强制3位小数。

问题改变后的新答案:因此,对于每次数据大于等于10时的更新,我连接'%'符号。

SELECT CASE WHEN CONVERT(decimal,REPLACE([Discount], '%', '')) <  10 THEN CONVERT(varchar(255),REPLACE([Discount], '%', '')) ELSE
CONVERT(varchar(255),REPLACE([Discount], '%', ''))   + '%' END AS [Discount] 
FROM [RDMS_DEV].[dbo].[t_TNSDiscount_dtl]

更新问题的输出结果:


2
投票

试试这个:你需要从折扣价值中删除'%'。

DECLARE @tbl TABLE
(
    Id INT ,
    Discount VARCHAR(10)
)

INSERT INTO @tbl(Id, Discount)VALUES(1, '12.12%')
INSERT INTO @tbl(Id, Discount)VALUES(1, '6')
INSERT INTO @tbl(Id, Discount)VALUES(1, '1')
INSERT INTO @tbl(Id, Discount)VALUES(1, '10%')
INSERT INTO @tbl(Id, Discount)VALUES(1, '8.347%')
INSERT INTO @tbl(Id, Discount)VALUES(1, '16.27')


SELECT CONVERT(decimal(10,3), REPLACE([Discount],'%','')) AS [Discount] FROM @tbl
© www.soinside.com 2019 - 2024. All rights reserved.