Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列中单词的SQL精确匹配_Sql_Sql Server_Match_Sql Like - Fatal编程技术网

列中单词的SQL精确匹配

列中单词的SQL精确匹配,sql,sql-server,match,sql-like,Sql,Sql Server,Match,Sql Like,我试图找到所有与我搜索的单词部分完全匹配的记录 例如,如果我正在查找其中包含单词spire的所有记录,我不想使用aspire或inspire检索行 SELECT * FROM Table WHERE name LIKE '%SearchedWord%' 在name和like图案前后添加空格: select * from Table where ' ' || name || ' ' like '% SearchWord %' |是ANSI SQL连接。有些产品有+或concat()

我试图找到所有与我搜索的单词部分完全匹配的记录

例如,如果我正在查找其中包含单词
spire
的所有记录,我不想使用
aspire
inspire
检索行

SELECT  *
FROM    Table
WHERE   name LIKE '%SearchedWord%'

在name和like图案前后添加空格:

select * from Table where ' ' || name || ' ' like '% SearchWord %'

|
是ANSI SQL连接。有些产品有
+
concat()

您需要从
名称
列中拆分单词,然后需要精确匹配

需要创建以下
SplitWords
函数。它获取一个句子,并返回其中的单词:

CREATE FUNCTION SplitWords(@text varchar(8000))
   RETURNS @words TABLE (
      pos smallint primary key,
      value varchar(8000)
   )
AS
BEGIN
   DECLARE
      @pos smallint,
      @i smallint,
      @j smallint,
      @s varchar(8000)

   SET @pos = 1
   WHILE @pos <= LEN(@text) 
   BEGIN 
      SET @i = CHARINDEX(' ', @text, @pos)
      SET @j = CHARINDEX(',', @text, @pos)
      IF @i > 0 OR @j > 0
      BEGIN
         IF @i = 0 OR (@j > 0 AND @j < @i)
            SET @i = @j

         IF @i > @pos
         BEGIN
            -- @i now holds the earliest delimiter in the string
            SET @s = SUBSTRING(@text, @pos, @i - @pos)

            INSERT INTO @words
            VALUES (@pos, @s)
         END 
         SET @pos = @i + 1

         WHILE @pos < LEN(@text) 
            AND SUBSTRING(@text, @pos, 1) IN (' ', ',')
            SET @pos = @pos + 1 
      END 
      ELSE 
      BEGIN 
         INSERT INTO @words 
         VALUES (@pos, SUBSTRING(@text, @pos, LEN(@text) - @pos + 1))

         SET @pos = LEN(@text) + 1 
      END 
   END 
   RETURN 
END

您可能需要考虑全文搜索,这取决于所使用的数据库。另外,你应该用数据库标记你的问题。对于MySQL:Select*from Table,其中regexp'[[::]]]在like中添加空格意味着它只搜索有空格的单词,我不知道空格是在我试图查找的单词之前还是之后。还有,姓名上的联系人应该做什么,这是“尝试搜索”中的列,如果我尝试为sql server复制它,则不会给出任何结果?
SELECT  *
FROM    [Table]
WHERE   'SearchedWord' IN (SELECT value FROM dbo.SplitWords(name))