데릭쉐퍼드와 select 되는 결과를 반환할 다음과 같습니다.
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
& # 39, 그리고 데릭쉐퍼드와 모든 결과 즉, 여기에는 함께 문장열 word2 word3 word1& # 39. # 39, & # 39, 또는 word1 word3 word2& 또는 다른 조합을 셋뿐이죠
모든 결과에 할 것이다.
하지만 이 모든 것이 느리고 apc® 단어 방법:
SELECT * FROM mytable
WHERE column1 LIKE '%word1%'
OR column1 LIKE '%word2%'
OR column1 LIKE '%word3%'
, 있어야 하는 경우 모든 단어를 사용합니다.
SELECT * FROM mytable
WHERE column1 LIKE '%word1%'
AND column1 LIKE '%word2%'
AND column1 LIKE '%word3%'
뭔가 스케쳐내 신속하게 수사하기 위해 필요한 전체 텍스트 검색, 이는 각 데이터베이스에 대해 매우 구체적인 유형:.
단, 하위 확인하기 위해 사용하는 경우 'LIKE' 는 다른 문자열이어야 문자열으로 이스케이프입니다 합니다 패턴 일치 문자 검색에 구체화하십시오.
SELECT * FROM MyTable
WHERE CHARINDEX('word1', Column1) > 0
AND CHARINDEX('word2', Column1) > 0
AND CHARINDEX('word3', Column1) > 0
또한, 이 점에 유의하십시오 미디어만을 빽이라는 문자열 일치 단어 일치 방법을 수락됨 대답 대신. # 39, & # 39 word1word2word3& 계속해보게, 예를 들어, 문자열 ',' 은 여전히 match).
CREATE FUNCTION [dbo].[fnSplit] ( @sep CHAR(1), @str VARCHAR(512) )
RETURNS TABLE AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @str)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @str, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT
pn AS Id,
SUBSTRING(@str, start, CASE WHEN stop > 0 THEN stop - start ELSE 512 END) AS Data
FROM
Pieces
)
DECLARE @FilterTable TABLE (Data VARCHAR(512))
INSERT INTO @FilterTable (Data)
SELECT DISTINCT S.Data
FROM fnSplit(' ', 'word1 word2 word3') S -- Contains words
SELECT DISTINCT
T.*
FROM
MyTable T
INNER JOIN @FilterTable F1 ON T.Column1 LIKE '%' + F1.Data + '%'
LEFT JOIN @FilterTable F2 ON T.Column1 NOT LIKE '%' + F2.Data + '%'
WHERE
F2.Data IS NULL
여기서 & # 39 에서 일부 * 대신 ',' # 39 word1 word2 word3& Column1 미터블 포함되어 있습니다. 그리고 그 사이에 다음과 같은 단어를 추가
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 And word2 And word3'
자세한 내용은 여기 https://msdn.microsoft.com/en-us/library/ms187787.aspx
다음과 같은 문구를 선택용 큰따옴표 사용
SELECT * FROM MyTable WHERE Column1 CONTAINS '"Phrase one" And word2 And "Phrase Two"'
모든 단어 하는 경우
SELECT * FROM MyTable WHERE CONTAINS(Column1,'word1 and word2 and word3', 1) > 0
단어의 필요한 경우
SELECT * FROM MyTable WHERE CONTAINS(Column1,'word1 or word2 or word3', 1) > 0
CREATE INDEX SEARCH_IDX ON MyTable(Column) INDEXTYPE IS CTXSYS.CONTEXT
방금 찾을 경우 a 매치.
SELECT * FROM MyTable WHERE INSTR('word1 word2 word3',Column1)<>0
SQL Server:
CHARINDEX(Column1, 'word1 word2 word3', 1)<>0
정확히 일치하는 얻을 수 있습니다. 예 ' (& # 39;;) a, ab, ac, & # 39, & # 39, & # 39 b;;;;) 'get a 매치 않습니다.
SELECT * FROM MyTable WHERE INSTR(';word1;word2;word3;',';'||Column1||';')<>0
이 경우 전체 텍스트 검색을 통해 수행됨 sql server 의 사용하는 것이 바람직합니다. 그러나 필요에 따라 can& # 39, 여기에 몇 가지 이유로 t get 워킹 DB 성능 집약형에 mcds - "'
사용하지 않는 이유는 " in"; 대신?
Select *
from table
where columnname in (word1, word2, word3)
가장 간편한 방법을 사용하여 지정하십시오. 성취 언급된 문제는 & # 39, & # [map_layer] [1] 와 가까왔는지 39 ~;). 예를 들어, 다음 기회를 줄 것이라고 쿼리합니다 포함하도록 하는 모든 열이 word1, word2 및 word3.
SELECT * FROM MyTable WHERE CONTAINS(Column1, 'word1 NEAR word2 NEAR word3')
SELECT * FROM MyTable WHERE CONTAINS(Column1, 'word1 ~ word2 ~ word3')
또한 각 문서의 콘테인스터블 a 랭크 되돌려줍니다 근접도를 " word1" " word2" 따라;;;; 그리고 word3" ";). 예를 들어,,) 는, 이 문서에서는 마디였나 " word2 및 word3 word1 ". 그 때문에 서로 다른 지역보다 더 높은 순위를 약간만이라도 약관은 문서.
다른 한 심아이엔큐 싶다 찾을 수 있는 것은 우리가 사용할 수 있으며 추가 proximity_term 열이 특정 거리 안에 있는 말은 그들 사이에 열 구입니다.
[1]: 2017년 보기 = sql server https://docs.microsoft.com/en-us/sql/t-sql/queries/contains-transact-sql?
DECLARE @SearchStr nvarchar(100)
SET @SearchStr = ' '
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
SET NOCOUNT ON
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
)
END
END
END
SELECT ColumnName, ColumnValue FROM #Results
DROP TABLE #Results