我在查询的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])
)
错误源自
CHARINDEX('.', [email])
如果我将句点更改为字母,则不会收到错误消息。每个记录中都有一个句点,即使没有记录,charindex函数也将返回0,这不会引发此错误。我一定想念一些简单的东西。请帮忙!
编辑。
我试图将其扔到一个非空的
isnull(CHARINDEX('.', [email]), 1)
中,以防万一由于某种原因它返回null,但这也不起作用。 最佳答案
错误源于
CHARINDEX('@',[email])-1
如果数据中没有@符号,则charindex返回0。从中减去1得到-1,这在子字符串函数中无效。
试试这个吧。
CHARINDEX('@',[email] + '@')-1
这将强制进行匹配,确保CharIndex始终返回> = 1的值,这将使您的子字符串函数成功。