pigzwy 2013-11-02 07:24 采纳率: 0%
浏览 2636

SQL Server 2008中检验email地址字段的有效性,正则表达式?patindex函数?

需要检验tb中储存email地址的字段(字段名位ContactEmail)的有效性,生成包含所有有效email地址的记录的视图,应该如何进行?纠结的问题有以下几点:
1:使用正则表达式,但是似乎MS SQL不支持?还是2008已经支持了,如果支持,应该怎么写?
2:如果不用正则,那是不是可以用patindex实现?如何实现?(似乎还有人说这个函数现在已经支持正则了,真的吗)

PS:email有效性的规则主要如下:username@domain
Username只能是0-9 or a-z or A-Z or - or _ or .
必须以字母或者数字开头
4-18位
必须有@
域名也是由0-9 or a-z or A-Z or - or . 组成(没有下划线)
求大神帮忙

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2024-02-13 17:17
    关注

    所有内容均由人工智能模型输出,其内容的准确性和完整性无法保证,不代表我的态度或观点。


    该回答引用文心大模型4.0,仅提供参考,不保证完全正确
    目前为文心大模型4.0专栏,网页版本:V2.5.3(2024.1.19)
    SQL Server 2008 本身不支持正则表达式。在之后的版本中,如 SQL Server 2017 及以上,有了一些对正则表达式的支持,但在 SQL Server 2008 中,你无法使用正则表达式进行模式匹配。


    然而,你可以使用 LIKE 运算符和 PATINDEX 函数来创建一些基本的模式匹配。虽然这些不如正则表达式强大,但对于简单的电子邮件验证来说可能足够了。


    PATINDEX 函数返回指定表达式中模式第一次出现的起始位置。如果未找到该模式,则返回 0。你可以使用它来检查电子邮件地址是否包含必需的字符和格式。


    以下是一个使用 PATINDEX 来验证电子邮件地址的基本示例:

    SELECT ContactEmail
    FROM tb
    WHERE 
        PATINDEX('%^[a-zA-Z0-9][a-zA-Z0-9-._]{0,16}@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$%', ContactEmail) > 0
    

    这个查询将返回所有符合基本电子邮件格式要求的 ContactEmail 字段。但是,请注意,这个模式并不完美,它可能会接受一些实际上无效的电子邮件地址。


    这里的模式解释:

    • ^[a-zA-Z0-9]:以字母或数字开头。
    • [a-zA-Z0-9-._]{0,16}:后面跟着 0 到 16 个字母、数字、点、减号或下划线。
    • @[a-zA-Z0-9-]+:@ 符号后跟着一个或多个字母、数字或减号。
    • \.[a-zA-Z0-9-.]+$:点符号后跟着一个或多个字母、数字、点或减号,直到字符串结束。

    请注意,这个模式不会检查顶级域(TLD)的有效性,也不会检查域名或用户名是否真实存在。对于更复杂的验证,你可能需要在应用程序级别使用正则表达式或其他验证库。


    另外,你提到的用户名长度是 4-18 位,但在上述 SQL 查询中,我设置了用户名的最大长度为 16 位,这是为了留下空间给 "@" 符号和域名。你可以根据需要调整这个长度。但是请注意,整个电子邮件地址在大多数系统中都有长度限制(通常是 320 个字符或更少),所以你需要确保整个地址不会超出这个限制。


    图片转文字可能造成误差,不代表模型真实水平

    评论

报告相同问题?

悬赏问题

  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?