当传递没有计量单位的字段名称的值时会报错,如何解决?
When pass value of field name without unit of measure it give error so How to solve?
我处理 SQL Server 2012 查询 - 我收到一个错误:
Invalid length parameter passed to the LEFT or SUBSTRING function.
代码:
SELECT
LEFT([Impedance], PATINDEX('%[^0-9.]%', [Impedance]) - 1) AS [Impedance],
RIGHT([Impedance], LEN([Impedance]) - PATINDEX('%[^0-9.]%', [Impedance]) + 1) AS [ImpedanceUnits]
FROM
##NewTable0
我有一个列 Impedance
,其值例如 50kg
。它将此值拆分为 50
和 kg
没有任何问题。
当该列仅包含 50
,没有任何度量单位时出现问题。
在这种情况下,我得到一个错误:
Invalid length parameter passed to the LEFT or SUB STRING function.
请问如何解决这个错误?
总结一下我的问题:当第 impedance
列只有数字时如何处理错误,例如 50
- 在不导致错误的情况下工作?
50kg
工作正常
50
导致错误
更新:我对50kg
这样的计量单位的数字没有任何问题,只有当我只有一个数字时才会有问题,比如作为 50
,没有计量单位。
这是我下面需要解决的问题
SELECT
Impedacte = (CASE
WHEN PATINDEX('%[^0-9.]%', '50') > 0
THEN LEFT('50', PATINDEX('%[^0-9.]%', '50') - 1)
ELSE '50'
END),
ImpedanceUnits = (CASE
WHEN PATINDEX('%[^0-9.]%', '50') > 0
THEN RIGHT('50', (LEN('50') - PATINDEX('%[^0-9.]%', '50') + 1))
ELSE NULL
END)
只需添加一个额外的字符,使 PATINDEX()
returns 成为一个合适的值:
LEFT([Impedance], PATINDEX('%[^0-9.]%', [Impedance] + ' ') - 1) AS [Impedance],
我处理 SQL Server 2012 查询 - 我收到一个错误:
Invalid length parameter passed to the LEFT or SUBSTRING function.
代码:
SELECT
LEFT([Impedance], PATINDEX('%[^0-9.]%', [Impedance]) - 1) AS [Impedance],
RIGHT([Impedance], LEN([Impedance]) - PATINDEX('%[^0-9.]%', [Impedance]) + 1) AS [ImpedanceUnits]
FROM
##NewTable0
我有一个列 Impedance
,其值例如 50kg
。它将此值拆分为 50
和 kg
没有任何问题。
当该列仅包含 50
,没有任何度量单位时出现问题。
在这种情况下,我得到一个错误:
Invalid length parameter passed to the LEFT or SUB STRING function.
请问如何解决这个错误?
总结一下我的问题:当第 impedance
列只有数字时如何处理错误,例如 50
- 在不导致错误的情况下工作?
50kg
工作正常50
导致错误
更新:我对50kg
这样的计量单位的数字没有任何问题,只有当我只有一个数字时才会有问题,比如作为 50
,没有计量单位。
这是我下面需要解决的问题
SELECT
Impedacte = (CASE
WHEN PATINDEX('%[^0-9.]%', '50') > 0
THEN LEFT('50', PATINDEX('%[^0-9.]%', '50') - 1)
ELSE '50'
END),
ImpedanceUnits = (CASE
WHEN PATINDEX('%[^0-9.]%', '50') > 0
THEN RIGHT('50', (LEN('50') - PATINDEX('%[^0-9.]%', '50') + 1))
ELSE NULL
END)
只需添加一个额外的字符,使 PATINDEX()
returns 成为一个合适的值:
LEFT([Impedance], PATINDEX('%[^0-9.]%', [Impedance] + ' ') - 1) AS [Impedance],