我在查询的where子句中有以下行,但我一直收到此错误:
Msg 537, Level 16, State 3, Line 3
Invalid length parameter passed to the LEFT or SUBSTRING function.
SUBSTRING(
[email],
1,
CHARINDEX('@',[email])-1
) =
SUBSTRING(
[email],
CHARINDEX('@',[email])+1,
CHARINDEX('.', [email])
)
Run Code Online (Sandbox Code Playgroud)
错误源于 CHARINDEX('.', [email])
如果我将句号更改为字母,我不会收到错误.每个记录都有一个句点,即使没有记录,charindex函数也会返回0,这不会导致抛出此错误.我一定很遗憾.请帮忙!
编辑.
我试着把它扔进一个isnull, isnull(CHARINDEX('.', [email]), 1)以防万一它由于某种原因返回null,但这也没有用.
G M*_*ros 22
错误源于
CHARINDEX('@',[email])-1
Run Code Online (Sandbox Code Playgroud)
如果数据中没有@符号,则charindex返回0.从中减去1得到-1,这在子字符串函数中无效.
试试这个.
CHARINDEX('@',[email] + '@')-1
Run Code Online (Sandbox Code Playgroud)
这会强制匹配,确保CharIndex将始终返回值> = 1,这将导致子字符串函数成功.