我有一个表格,其中包含一个填充了
等值的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.
我可以使用或不使用£符号来获取值,但我需要将其转换为正确的小数位数以用于报告。 我在这里做错了什么?
答案 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