【问题标题】:IndexOf function in T-SQLT-SQL 中的 IndexOf 函数
【发布时间】:2010-12-24 13:51:19
【问题描述】:

给定一个电子邮件地址列,我需要找到 @ 符号的位置以进行子字符串化。

对于 T-SQL 中的字符串,indexof 函数是什么?

寻找返回字符串中子字符串位置的东西。

在 C# 中

var s = "abcde";
s.IndexOf('c'); // yields 2

【问题讨论】:

    标签: sql sql-server tsql string


    【解决方案1】:

    CHARINDEX 就是你要找的东西

    select CHARINDEX('@', 'someone@somewhere.com')
    -----------
    8
    
    (1 row(s) affected)
    

    -或-

    select CHARINDEX('c', 'abcde')
    -----------
    3
    
    (1 row(s) affected)
    

    【讨论】:

      【解决方案2】:

      一个非常小的选择:

      电子邮件地址的 RFC 允许第一部分在引用时包含“@”符号。示例:

      "john@work"@myemployer.com
      

      这很罕见,但可能会发生。理论上,你应该在 last "@" 符号上拆分,而不是第一个:

      SELECT LEN(EmailField) - CHARINDEX('@', REVERSE(EmailField)) + 1
      

      更多信息:

      http://en.wikipedia.org/wiki/Email_address

      【讨论】:

      • 这些是我试图在我们的数据库中确定和修复的类型。主要是人们只是错误地输入了他们的域名。大多数网络重定向回真实的,但 mx 记录不转发,显示它们会很尴尬
      【解决方案3】:

      您可以使用CHARINDEXPATINDEX 来返回字符串中指定表达式的起始位置。

      CHARINDEX('bar', 'foobar') == 4
      PATINDEX('%bar%', 'foobar') == 4
      

      请注意,您需要在 PATINDEX 的任一侧使用通配符。

      【讨论】:

        【解决方案4】:

        我相信你想使用CHARINDEX。你可以阅读它here

        【讨论】:

          猜你喜欢
          • 2011-07-29
          • 2011-10-22
          • 2012-09-14
          • 1970-01-01
          • 2010-09-09
          • 2015-11-05
          • 2012-11-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多