在区分大小写的SQL Server数据库中执行不区分大小写的Like查询



这是我的场景。

SQL Server 2014标准版,我有一个数据库,排序SQL_Latin1_General_CP437_BIN2是区分大小写的。

我想执行一个LIKE查询,它应该返回输出,而不考虑大小写。

示例:如果我执行Like查询以获取用户名'John'的记录,它还应该返回行,无论大小写敏感的'John', 'John', 'John', 'John'。

我尝试使用Lcase, Ucase,但我得到错误

Msg 195, Level 15, State 10, Line 4
'LCASE'不是可识别的内置函数名。

这是我的示例查询

SELECT TOP 300 * 
FROM
    (SELECT 
         userNo, userName, Place, Birthdate
     FROM usertable 
     WHERE personid = 2 
       AND (Name LIKE LCASE('%john%')) 
     UNION 
     SELECT 
         userNo, userName, Place, Birthdate, 
     FROM usertable2 
     WHERE personid = 2 
       AND (Name LIKE LCASE( '%john%') OR Place LIKE LCASE('%NY%')) ) a 
ORDER BY 
    userNo

伙计们帮我拿出你宝贵的建议,我有点困惑使用基于排序的DB。

可以使用UPPERLOWER函数将值转换为相同的大小写。例如:

SELECT *
FROM YourTable
WHERE UPPER(YourColumn) = UPPER('VALUE')

或者,您可以在比较时手动指定排序规则:

SELECT *
FROM YourTable
WHERE YourColumn = 'VALUE' COLLATE SQL_Latin1_General_CP1_CI_AI

除了使用lower()之外,您还需要将其应用于而不是模式。模式已经是小写了

Select  top 300 a.*
from (SELECT userNo, userName, Place, Birthdate
      FROM usertable 
      where personid = 2 and lower(Name) LIKE '%john%'
      UNION 
      SELECT userNo, userName, Place, Birthdate
      FROM usertable2 
      where personid = 2 and
            (lower(Name) like '%john%' or lower(Place) like '%ny%')
     ) a
order by userNo;

请注意,UNION ALLUNION更可取,除非您有意增加删除重复项的开销。

不同Db-Provider的语法不同例如:

select * from TABLE1 where upper(COL) like 'SOMETHING',,在ODCB Provider for Microsoft中出现语法错误…正确的语法是:select * from TABLE1 where ucase(COL) like 'SOMETHING',即大写

所以你应该使用你的数据库提供程序使用的正确语法

谢谢

使用下面的代码

SELECT TOP 300 *从(选择用户编号,用户名,地点,出生日期从usertableWHERE personid = 2AND(名字像'%john%')结合

 SELECT 
     userNo, userName, Place, Birthdate, 
 FROM usertable2 
 WHERE personid = 2 
   AND (Name LIKE '%john%' OR Place LIKE '%NY%') a 

订单userNo