在区分大小写的 SQL 服务器数据库中执行不区分大小写的 Like 查询
Perform a Case insensitive Like query in a case sensitive SQL Server database
这是我的场景。
SQL Server 2014 标准版,我有一个数据库,其排序规则 SQL_Latin1_General_CP437_BIN2
区分大小写。
我想执行一个 LIKE
查询,该查询应该 return 输出不区分大小写。
例如:如果我执行 Like
查询以获取用户名 'John' 的记录,它也应该 return 行,不区分大小写 'JOHN'、'John', 'john','joHN'.
我尝试使用 Lcase
、Ucase
,但出现错误
Msg 195, Level 15, State 10, Line 4
'LCASE' is not a recognized built-in function name.
这是我的示例查询
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
大家帮我出出宝贵的建议,我对使用基于排序规则的数据库有点困惑。
您可以使用 UPPER
or LOWER
函数将值转换为相同的大小写。例如:
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 ALL
优于 UNION
,除非您有意承担删除重复项的开销。
使用下面的代码
SELECT 前 300 *
从
(SELECT
用户号、用户名、地点、出生日期
从用户表
其中 personid = 2
AND(名字像'%john%')
联盟
SELECT
userNo, userName, Place, Birthdate,
FROM usertable2
WHERE personid = 2
AND (Name LIKE '%john%' OR Place LIKE '%NY%') a
订购方式
用户编号
语法因不同的 Db-Provider 而异例如:
select * from TABLE1 where upper(COL) like 'SOMETHING',, gives syntax error in ODCB Provider for Microsoft... and the right syntax is :
select * from TABLE1 where ucase(COL) like 'SOMETHING' ,, i.e. uppercase
所以您应该使用您的数据库提供商使用的正确语法
谢谢
这是我的场景。
SQL Server 2014 标准版,我有一个数据库,其排序规则 SQL_Latin1_General_CP437_BIN2
区分大小写。
我想执行一个 LIKE
查询,该查询应该 return 输出不区分大小写。
例如:如果我执行 Like
查询以获取用户名 'John' 的记录,它也应该 return 行,不区分大小写 'JOHN'、'John', 'john','joHN'.
我尝试使用 Lcase
、Ucase
,但出现错误
Msg 195, Level 15, State 10, Line 4
'LCASE' is not a recognized built-in function name.
这是我的示例查询
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
大家帮我出出宝贵的建议,我对使用基于排序规则的数据库有点困惑。
您可以使用 UPPER
or LOWER
函数将值转换为相同的大小写。例如:
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 ALL
优于 UNION
,除非您有意承担删除重复项的开销。
使用下面的代码
SELECT 前 300 * 从 (SELECT 用户号、用户名、地点、出生日期 从用户表 其中 personid = 2 AND(名字像'%john%') 联盟
SELECT
userNo, userName, Place, Birthdate,
FROM usertable2
WHERE personid = 2
AND (Name LIKE '%john%' OR Place LIKE '%NY%') a
订购方式 用户编号
语法因不同的 Db-Provider 而异例如:
select * from TABLE1 where upper(COL) like 'SOMETHING',, gives syntax error in ODCB Provider for Microsoft... and the right syntax is : select * from TABLE1 where ucase(COL) like 'SOMETHING' ,, i.e. uppercase
所以您应该使用您的数据库提供商使用的正确语法
谢谢