【问题标题】:how to combine firstname and lastname in SQL and search with LIKE如何在 SQL 中结合名字和姓氏并使用 LIKE 进行搜索
【发布时间】:2013-06-10 22:03:40
【问题描述】:

我想将FirstNameLastName 合并到一个名为'FULL NAME' 的列中,并在SQL 中使用LIKE 进行搜索。

示例 1:

名字:米兰
姓氏:帕特尔

全名:米兰·帕特尔

搜索:Like '%SomeText%'

示例 2:

标题:“会议:一种实用的工作替代方案。”

搜索:我想搜索给定字符串中的整个单词。例如:工作应返回上述标题。

这是我目前所拥有的。

SELECT 
    CE.Title, CC.FirstName + ' ' + CC.LastName AS FullName
FROM 
    EntryTable CE
JOIN 
    UserTable CC ON CE.EntryId = CC.USerId
WHERE 
    CC.FirstName LIKE 'n%'

编辑

我正在慢慢地到达那里。搜索可以正常使用此查询。

    SELECT 
     CE.Title 
    FROM 
     EntryTable CE
    JOIN 
     UserTable CC
    ON 
     CE.EntryId = CC.USerId
    WHERE 
     CC.FirstName  + ' ' + CC.LastName LIKE 's%'

但它只搜索以's' 开头的名称,我想搜索名称的开头、结尾和包含条件。我该怎么办呢。请帮忙

【问题讨论】:

  • 为什么不首先创建一个包含全名的计算列? msdn.microsoft.com/en-us/library/ms191250(v=sql.105).aspx ....然后你就可以一直拥有它,并且不需要在查询中将它与+
  • “这是我目前所得到的” - 那有什么作用?
  • Searck Like '%sometext%''sometext%' 是不同的东西
  • 什么数据库系统?供应商之间的字符串操作功能差异很大 - SQL 只是查询语言,而不是产品 - 所以这并不能告诉我们您正在使用什么系统......

标签: c# asp.net sql


【解决方案1】:

哪里 CONCAT(CC.FirstName, ' ', CC.LastName) Like "%n%"

【讨论】:

    【解决方案2】:
    SELECT some_column_name FROM some_table where firstname + ' ' + lastname LIKE 'some_value'
    

    不需要FullName 列。

    【讨论】:

      【解决方案3】:

      您可以使用LIKE 连接列值,如下所示

      WHERE 
        CC.FirstName + ' ' + CC.LastName LIKE 's%'
      

      但它只搜索以“s”开头的名称,我想搜索 名称开始,结束,也包含条件。我该怎么办 那。请帮忙

      那么你必须在搜索字符串之前和之后使用%,如下所示

      WHERE 
        CC.FirstName + ' ' + CC.LastName LIKE '%s%'
      

      【讨论】:

        【解决方案4】:

        你可以使用 concat

           SELECT CE.Title, concat(CC.FirstName , ' ' , CC.LastName) AS FullName
           FROM EntryTable CE
          JOIN UserTable CC
          ON CE.EntryId = CC.USerId
          WHERE 
          concat(CC.FirstName , ' ' , CC.LastName) LIKE 'n%'
          OR  CC.FirstName LIKE 'n%' OR  CC.FirstName LIKE '%n'
          OR  CC.LastName LIKE 'n%'  OR CC.LastName LIKE '%n'
                                ^^--// (1).   ^^--// (2) 
        

        (1) 在您搜索的字符串的第一个中查找姓氏。

        (2) 在您搜索的字符串末尾查找姓氏。

        (3)要在字符串中间查找姓氏,请执行此操作 '%n%'

        【讨论】:

        • OP 想搜索FullName col
        • 我喜欢这个答案。但是我很困惑我将如何搜索全名以及标题中匹配的单词。
        • 你可以做很多 OR 语句来搜索我编辑我的答案的单词。添加了两个或按名字和姓氏也搜索
        【解决方案5】:

        您不能在WHERE 子句上使用ALIAS,因为在SQL 操作顺序中,WHERE 子句在SELECT 子句之前执行。

        最好使用完整的连接是WHERE 子句

        WHERE CC.FirstName + ' ' + CC.LastName LIKE 'n%'
        

        如果您不想使用它,请将您的查询包装在子查询中,以便您可以使用ALIAS

        SELECT *
        FROM
        (
           SELECT CE.Title, CC.FirstName + ' ' + CC.LastName AS FullName
           FROM   EntryTable CE JOIN UserTable CC
                  ON CE.EntryId = CC.USerId
        ) sub
        WHERE sub.FullName LIKE 'n%'
        

        【讨论】:

          【解决方案6】:

          也将它们组合在 WHERE 子句中,并带有两个 % 符号。

          【讨论】:

          • 好的,答案和评论的区别在哪里?
          • @Dado Jerry,是的,差别很大。我真的很想了解,因为我坚信简短的句子回答了这个问题。就像 Damith 的一段代码获得了投票一样。我的回答只是需要一些理解......
          • 这不是一个糟糕的答案,而且看起来也不像是评论。其他答案比这个更糟糕,因为它们在没有解释的情况下转储代码,甚至根本不回答问题。
          • 其实这是唯一解决这个问题的,如果你能再扩展一点就好了
          • 这三架投反对票的无人机能否解释他们为什么互相模仿(例如:投反对票一个回答问题的新用户的答案,而不留下评论解释他们投反对票的原因,即使在在 cmets 中已经解释说这 一个很好的答案)?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 1970-01-01
          • 2018-09-02
          • 2020-01-19
          • 1970-01-01
          相关资源
          最近更新 更多