如何在T-SQL中一起使用CONTAINS()和LOWER()?

时间:2015-05-19 03:07:15

标签: tsql sql-server-2012

我正在SQL Server 2012中开发存储过程

在某些方面,我想确定条件,如果“NAME”包含子字符串@pattern, Case Insesitive-ly

@pattern是仅包含小写字母的字符串

不知怎的,我已经尝试了

http://很好

但是当我添加LOWER()

where CONTAINS(NAME, @pattern)

它给我语法错误。

我是T-SQL的新手,有人可以帮帮我吗?

  1. 为什么语法错误,以及如何解决?
  2. 有没有更好的方法来完成相同的任务?
  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

如果您的表格没有全文索引,那么CONTAINS将无效

以下解决您问题的其他变体:

DECLARE @table AS TABLE ( SomeText VARCHAR(40) )
INSERT  INTO @table
VALUES  ( 'abcdfh' ),
        ( 'ghijkl' ),
        ( 'mnopq' );

DECLARE @pattern AS VARCHAR(10) 
SET @pattern = '%abc%'

--variant using like
SELECT  T.sometext
FROM    @table AS T
WHERE   T.SomeText LIKE @pattern

--variant using PATINDEX
SELECT  sometext
FROM    @table AS T
WHERE   PATINDEX(@pattern, T.SomeText) > 0

--variant using CHARINDEX, but it can't be used with '%' and '[ ]',
--just to find first char position of the searched word in text as below
SET @pattern = 'abc'
SELECT  sometext
FROM    @table AS T
WHERE   CHARINDEX(@pattern, T.SomeText) > 0
相关问题