将子字符串转换为十进制时,将数据类型 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
我有一个 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