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

Sql server 将子字符串转换为十进制时,将数据类型varchar转换为数字时出错,sql-server,tsql,decimal,varchar,Sql Server,Tsql,Decimal,Varchar,我有一个表,其中包含一个VARCHAR列,其中填充了如下值 员工无权享受SSP,因为他们的平均周收入低于LEL。平均收入:44.13750英镑 我正在尝试提取(符号后的值,因此我尝试了: SELECT ClientId , Max(PayPeriod) As PeriodNo , CASE WHEN MAX(Comment) like '%£%' THEN CAST(MAX(right(Comment, charindex('£', reverse(Comment)

我有一个表,其中包含一个VARCHAR列,其中填充了如下值

员工无权享受SSP,因为他们的平均周收入低于LEL。平均收入: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\u Convert函数:

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

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

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

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

您可以尝试此操作吗,可以使用此函数提取字符后的数字

    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
你能试试这个吗?这个函数可以用来提取字符后面的数字

    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

听起来字符串值中有一些非法字符。可能是小数点?听起来字符串值中有一些非法字符。也许是您的小数点?谢谢,但现在我在将varchar转换为数据类型numeric时出现了一个错误
算术溢出错误。
@OurManinBananas您可以尝试使用
十进制(18,2)
更新的答案吗?我希望您的评论栏没有任何字符,除了
。我尝试过,同样的错误,因此,必须更仔细地检查字符串,去掉所有内容,如换行等on@OurManinBananas没有任何示例数据,很难提供任何好的解决方案。我添加了一些示例数据谢谢,但是现在我在将varchar转换为数据类型numeric时遇到了一个错误
算术溢出错误。
@OurManinBananas您可以尝试使用
十进制(18,2)
更新的答案吗?我希望您的评论栏中除了
)之外没有其他字符。我尝试过,同样的错误,因此必须更仔细地检查字符串,去掉所有的东西,比如换行等等on@OurManinBananas没有任何示例数据,很难提供任何好的解决方案。我添加了一些示例数据