【问题标题】:Search for row where email contains only the X character搜索电子邮件仅包含 X 字符的行
【发布时间】:2018-10-11 12:38:44
【问题描述】:

我想搜索 column email 仅包含 X 字符的行。

例如,如果emailXXXX,它应该获取该行,但如果email 是XXX@XXX.COM,它不应该被获取。

我尝试过这样的事情,但它返回给我的所有电子邮件都包含X 字符:

select *
from STUDENTS
where EMAIL like '%[X+]%';

知道我的查询有什么问题吗?

谢谢

【问题讨论】:

标签: sql-server regex


【解决方案1】:

试试下面的查询:

select *
from STUDENTS
where LEN(EMAIL) > 0 AND LEN(REPLACE(EMAIL,'X','')) = 0;

【讨论】:

    【解决方案2】:

    我会使用PATINDEX:

    SELECT * FROM STUDENTS WHERE PATINDEX('%[^X]%', Email)=0
    

    只有 X 表示除 X 之外没有其他字符。

    要处理NULLs 和空字符串,您应该考虑其他条件。请参阅下面的演示:

    WITH STUDENTS AS
    (
        SELECT * FROM (VALUES ('XXXX'),('XXX@XXX.COM'),(NULL),('')) T(Email)
    )
    SELECT *
    FROM STUDENTS
    WHERE PATINDEX('%[^X]%', Email)=0 AND LEN(Email)>0
    

    【讨论】:

    • 我不认为 patindex 比正则表达式更好
    【解决方案3】:

    这将查找电子邮件仅包含 1 个或多个 X 而没有其他字符的所有行。

    SELECT *
    FROM STUDENTS
    WHERE Email not like '%[^X]%' and Email <> ''
    

    【讨论】:

    • 您能否详细说明这如何解决 OP 的问题?
    猜你喜欢
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多