将子字符串转换为十进制时,将数据类型varchar转换为数字时出错

时间:2017-08-23 10:11:19

标签: sql-server tsql decimal varchar

我有一个表格,其中包含一个填充了

等值的VARCHAR列

员工无权享受SSP,因为他们的平均每周收入低于LEL。平均收入:44.13750英镑

enter image description here

我正在尝试在£符号后提取值,所以我尝试过:

SELECT 
    ClientId
    , Max(PayPeriod) As PeriodNo
, CASE WHEN MAX(Comment) like '%£%' THEN 
    CAST(MAX(right(Comment, charindex('£', reverse(Comment))-1) )AS DECIMAL(5,2)) 
    ELSE 0 END AS AvgEarnings2      
FROM 
    t_PayrollSSPEmployeeComment 
WHERE 
    comment like '%LEL%' AND comment like '%£%'
        GROUP BY 
            ClientID

我只想检索该值,以便将其转换为十进制,如110.25

但我收到错误

Error converting data type varchar to numeric.

我可以使用或不使用£符号来获取值,但我需要将其转换为正确的小数位数以用于报告。 我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

如果您使用的是SQL Server 2012或更高版本,请使用Try_Convert函数:

[reduce(lambda x, y: x + y, item) for item in square]

并且看,如果您的错误代码没有将表达式转换为十进制类型而不是错误,结果将是Try_Convert (Decimal(5, 2), MAX(right(Comment, charindex('£', reverse(Comment))-1) )) 并使用该值检查问题。

答案 1 :(得分:1)

你可以尝试这个吗,SUBSTRING函数可以用来提取字符£之后的数字。

    SELECT 
    ClientId
    ,Max(PayPeriod) As PeriodNo
    ,CASE WHEN MAX(Comment) like '%£%' THEN      
     CAST(SUBSTRING(MAX(Comment),2,LEN(MAX(Comment))) AS DECIMAL(18,2))
        ELSE 0 END AS AvgEarnings2      
    FROM t_PayrollSSPEmployeeComment 
    WHERE comment like '%LEL%' AND comment like '%£%'
     GROUP BY ClientID