我在查询的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的值,这将使您的子字符串函数成功。

10-08 16:23