我想在T-SQL中编写一个查询来对两个连接列执行搜索。这两列是fname和lname。以下是我到目前为止的情况:
SELECT
fname,
lname,
...
FROM
users
JOIN
othertable ON foo=bar
WHERE
fname+' '+lname LIKE '%query%'
但是,SQL服务器不喜欢这种语法。我如何构造查询,以便我可以执行搜索两个连接列的WHERE LIKE操作,允许我搜索用户的全名,而不是单独搜索名字和姓氏?
答案 0 :(得分:5)
我只能建议fname或lname中的一个为NULL,因此LIKE失败。(NULL concat any is null)
尝试
...
ISNULL(fname, '') + ' ' + ISNULL(lname, '') LIKE '%query%'
但是,我会使用computed column并考虑将其编入索引,因为这会运行得非常糟糕。
答案 1 :(得分:4)
我的建议是在表中为full_name添加一个计算列 计算列示例:
--drop table #test
create table #test (test varchar (10) , test2 varchar (5),[Calc] AS right(test, 3))
Insert #test
values('hello', 'Bye')
Insert #test
values('hello-bye', null)
Alter table #test
add [MyComputedColumn] AS substring(test,charindex('-',test), len(test)),
Concatenatedcolum as test+ ' ' +test2
select * from #test
正如你所看到的,你可能需要玩一下才能得到你想要的结果。首先在临时表中执行此操作,以避免必须多次重构数据库表。对于名称,特别是如果您使用通常为空的中间名,您可能需要添加一些代码来处理空值。您可能还需要有时代码转换为相同的数据类型,如果您连接的文件是例如int而另一个是varchar。
答案 2 :(得分:0)
我认为其中一个连接条件可能会导致问题。尝试重写它,你可能会发现错误消失;)