需求是这样的,系统的员工名称要按姓和名查询,名称的格式是 FirstName LastName 中间是空格的格式,FirstName和LastName分别只有一个单词,还有系统级员工superadmin只有一个单词,但这个按FirstName算,现在要求是输入firstName和lastName进行右模糊匹配,请问SQL怎么写啊?
我想到的是这样的:
按firstName查:super(staff_name) like '%'|| super(:firstName) ||'%'
按lastName查: super(staff_name) like '%'||' '||'%'|| super(:lastName) ||'%'
好像不是很严谨,请大虾们帮帮忙

解决方案 »

  1.   

    SELECT * FROM TB WHERE NAME LIKE '%firstName%lastName%'?
      

  2.   

    SELECT * FROM TB WHERE NAME LIKE '%'+firstName+'%' AND NAME LIKE '%'+lastName+'%'?
      

  3.   

    是分开查啊
    一个按输入firstName
    一个输入lastName
    谢谢
    举个例子吧
    Rose Kate
    Rose Cate
    Wid  Cate
    superadmin按firstName输入 rose或rose的几个字母 能查到 Rose Kate和 Rose Cate
    同理按lastName输入 cate或cate得几个字母 能查到 Rose Cate和 Wid Cate
    例外按firstName输入 superadmin 可查到 superadmin
    说的应该清楚了吧
      

  4.   


    那你还管什么FIRSTNAME,直接用LIKE肯定能查出来的
      

  5.   


    SELECT * FROM TB WHERE NAME LIKE ''+firstName+' %'这样不行吗??
      

  6.   


    DECLARE @TB TABLE(NAME VARCHAR(20))
    INSERT @TB
    SELECT 'Rose Kate' UNION ALL
    SELECT 'Rose Cate' UNION ALL
    SELECT 'Wid  Cate'DECLARE @FIRSTNAME VARCHAR(500)
    SET @FIRSTNAME='ROSE'
    DECLARE @LASTNAME VARCHAR(500)
    SET @LASTNAME='CATE'
    SELECT * FROM @TB WHERE SUBSTRING(NAME,1,CHARINDEX(' ',NAME)-1)=@FIRSTNAME
    SELECT * FROM @TB WHERE REPLACE(STUFF(NAME,1,CHARINDEX(' ',NAME),''),' ','')=@LASTNAME/*(所影响的行数为 3 行)NAME                 
    -------------------- 
    Rose Kate
    Rose Cate(所影响的行数为 2 行)NAME                 
    -------------------- 
    Rose Cate
    Wid  Cate(所影响的行数为 2 行)*/如果是特殊的你判断一下吧