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

Error converting data type varchar to numeric when converting substring to decimal

我有一个 table,其中包含一个填充有

等值的 VARCHAR 列

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

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

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.

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

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

Try_Convert (Decimal(5, 2), MAX(right(Comment, charindex('£', reverse(Comment))-1) ))

看看,如果您的错误代码没有将表达式转换为十进制类型,而不是错误,结果将是 null 并检查该值的问题。

你能试试这个吗,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