【问题标题】:SQL SELECT WHERE string ends with ColumnSQL SELECT WHERE 字符串以 Column 结尾
【发布时间】:2014-10-14 08:10:37
【问题描述】:

我在 SQL Server 2012 中有这张表:

Id INT 
DomainName NVARCHAR(150)

并且该表具有这些域名值

  1. google.com
  2. microsoft.com
  3. othersite.com

还有这个值:

mail.othersite.com

我需要选择字符串以列值结尾的行,对于这个值,我需要获取第 3 行 othersite.com

是这样的:

DomainName Like '%value' 

但反过来……

'value' Like %DomainName

【问题讨论】:

    标签: sql sql-server select sql-like


    【解决方案1】:

    你可以使用这样的查询:

    SELECT * FROM TABLE1
    WHERE 'value' LIKE '%' + DomainName
    

    【讨论】:

    • 请注意,在其他数据库(例如 Oracle)上,您需要使用字符串连接运算符,因为“+”会给您一个无效数字错误。例如:WHERE 'value' LIKE '%' || DomainName
    【解决方案2】:

    它适用于 mysql 服务器。 [喜欢'%'|| value ] 效果不佳,因为当 value 以数字开头时,这就像不返回 true。

    SELECT * FROM TABLE1 WHERE DomainName like CONCAT('%', value)
    

    【讨论】:

      【解决方案3】:

      在 Oracle 中,您可以使用 REGEXP_LIKE 字符串函数来搜索字符串的开始/结束。此函数的第一个参数是表达式/源字符串,第二个参数是模式/搜索字符串。使用美元 $ 表示以值结尾,使用 ^ 表示以值开头。例如

      select * from TABLE1 where REGEXP_LIKE(DomainName, :value ||'$');
      

      如果不同值之间存在 OR 条件,请使用以下管道 |语法。

      select * from TABLE1 where REGEXP_LIKE(DomainName, 'value1$|value2$|value2$');
      

      Refer this link for more info on REGEXP_LIKE string function

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        • 2018-02-24
        • 2015-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多