我怀疑从表格中的一列中找到文字;在其他表的其他栏目中。
想象一下,你有这些专栏:
你想在[B] .Y
中找到[A] .X的完整文本我一直在考虑使用“CONTAINS”功能,但我认为这可能不是最好的主意。因为您必须编写需要查找的文本(而不是列的完整文本)。
我认为它可能是这样的:
Use AdventureWorks2012;
GO
SELECT [B].Y
FROM Production.Product
WHERE CONTAINS(([A].Y), [A].X);
But it doesn't work.
哪个是最佳选择?
我正在使用SQL SERVER V17.0
感谢!!!
答案 0 :(得分:3)
我会选择like
:
select b.y, a.x
from b join
a
on b.y like '%' + a.x + '%' ;
然而,在SQL Server中没有一种非常有效的方法来执行此逻辑。
答案 1 :(得分:1)
这是一个快速示例,用于搜索另一个表中定义的特定单词集的字符串列表。这个例子只搜索系统错误消息文本并查找单词'overflow'和'CryptoAPI',但是你将用'A'和'sys.messages'表替换单词table和表'B'
注意:这不是搜索大量文本的最有效方式。
-- CREATE TEMP TABLE WITH WORDS TO MATCH
CREATE TABLE #words (
[Word] nvarchar(100)
)
-- SAMPLE STRINGS
INSERT INTO #words VALUES ('overflow')
INSERT INTO #words VALUES ('CryptoAPI')
-- SEARCH THROUGH SYSTEM ERROR MESSAGES FOR SAMPLE STRINGS
SELECT [W].[Word] AS 'Matched word'
, [M].[text]
FROM [sys].[messages] AS [M]
JOIN #words AS [W]
ON [M].[text] LIKE '%' + [W].[Word] + '%'
答案 2 :(得分:1)
CREATE TABLE #TempA
(ColumnX VARCHAR(10)
);
CREATE TABLE #TempB
(ColumnY VARCHAR(100)
);
INSERT #TempA
VALUES('fish'),('burguer'),('sugar'),('tea'),('coffee'),('window'),('door');
INSERT #TempB
VALUES('I like potatoes'),('I eat sugar'),('I eat sugar with onions'), ('I have a car'),('I don''t like dogs');
SELECT *
FROM #TempB b
WHERE EXISTS(SELECT 1 FROM #TempA a WHERE CHARINDEX(a.ColumnX, b.ColumnY,1) > 0);
答案 3 :(得分:1)
我同意@GordonLinoff。 Like
是我也想要的,但我想在所提供的答案中做出一点改进。
CREATE TABLE #TempA (ColumnX VARCHAR(10));
CREATE TABLE #TempB (ColumnY VARCHAR(100));
INSERT #TempA
VALUES ('fish')
,('burguer')
,('sugar')
,('tea')
,('coffee')
,('window')
,('door');
INSERT #TempB
VALUES ('I steam potatoes')
, ('I like potatoes')
,('I eat sugar')
,('I eat sugar with onions')
,('I have a car coffee')
,('I don''t like dogs')
,('Window is clean')
,('Open the door')
;
SELECT b.ColumnY
,a.ColumnX
FROM #TempB b
INNER JOIN #TempA a ON ' '+ b.ColumnY + ' ' LIKE '% ' + a.ColumnX + ' %'
这将在STEAM中找不到TEA。