【问题标题】:SQL LIKE Statment that applies on everything up to a certain character适用于直到某个字符的所有内容的 SQL LIKE 语句
【发布时间】:2020-01-28 00:46:40
【问题描述】:

我的数据库包含一个“网站”列,其中包含以下数据:

foo1.web.com
foo2.gov
doo3.shoo.net
baa.com
baa2.shoo.com

我正在寻找一个选择语句来抓取变量之类的所有内容,但只到第一个时期,我想忽略该时期之后的所有内容:

DELCARE @variable varchar(MAX);
SET @variable = 'oo';

SELECT * WHERE website LIKE '%' + @variable + '%' --(but only apply like statement up to the first .)

所以我会得到的是:

foo1.web.com
foo2.gov
doo3.shoo.net

但它会遗漏

baa2.shoo.com

提前感谢您的帮助!

编辑: 使用 SQL Server

【问题讨论】:

  • 你用的是什么 rdbms?
  • 提示:使用子字符串函数将website 切割成所需的长度。
  • @1010 SQL Server
  • 附加提示:也许更确切地说,子字符串到所需长度,子字符串到所需字符......就像.的第一个实例

标签: sql sql-server database sql-like


【解决方案1】:

对于 SQL Server,对于oo,您只能查看 URL 的左侧 N 个字符。您将通过使用LEFTCHARINDEX 找到第一个. 来获取左边的N 个字符

SELECT * 
FROM @table
WHERE LEFT(val, CHARINDEX('.', val)) LIKE '%'+@variable+'%'

【讨论】:

    【解决方案2】:

    只是另一种选择

    示例

    Declare @YourTable Table ([website] varchar(50))
    Insert Into @YourTable Values 
     ('foo1.web.com')
    ,('foo2.gov')
    ,('doo3.shoo.net')
    ,('baa.com')
    ,('baa2.shoo.com')
    
    
    DECLARE @variable varchar(MAX);
    SET @variable = 'oo';
    
    Select * 
     from @YourTable
     where charindex('.',website+'.') > nullif(charindex(@variable,website),0)
    

    退货

    website
    foo1.web.com
    foo2.gov
    doo3.shoo.net
    

    【讨论】:

      【解决方案3】:

      假设您搜索的列名为site,那么我相信您可以使用这样的内容:

      SELECT * FROM website WHERE `site` LIKE '%oo%' AND INSTR(`site`, 'oo')<INSTR(`site`, '.');

      【讨论】:

      • 这不是有效的 SQL Server 语法。帖子刚刚更新以请求 SQL Server。
      猜你喜欢
      • 2013-10-29
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多