需求是这样的,系统的员工名称要按姓和名查询,名称的格式是 FirstName LastName 中间是空格的格式,FirstName和LastName分别只有一个单词,还有系统级员工superadmin只有一个单词,但这个按FirstName算,现在要求是输入firstName和lastName进行右模糊匹配,请问SQL怎么写啊?
我想到的是这样的:
按firstName查:super(staff_name) like '%'|| super(:firstName) ||'%'
按lastName查: super(staff_name) like '%'||' '||'%'|| super(:lastName) ||'%'
好像不是很严谨,请大虾们帮帮忙
我想到的是这样的:
按firstName查:super(staff_name) like '%'|| super(:firstName) ||'%'
按lastName查: super(staff_name) like '%'||' '||'%'|| super(:lastName) ||'%'
好像不是很严谨,请大虾们帮帮忙
一个按输入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
说的应该清楚了吧
那你还管什么FIRSTNAME,直接用LIKE肯定能查出来的
SELECT * FROM TB WHERE NAME LIKE ''+firstName+' %'这样不行吗??
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 行)*/如果是特殊的你判断一下吧