这是我的情景。
SQL Server 2014标准版,我有一个数据库SQL_Latin1_General_CP437_BIN2
,区分大小写。
我想执行一个LIKE
查询,该查询应该返回输出而不管区分大小写。
例如:如果我执行Like
查询以使用userName' 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
伙计们帮助我提出宝贵的建议,我对使用基于校对的数据库感到困惑。
答案 0 :(得分:13)
您可以使用UPPER
或LOWER
函数将值转换为相同的大小写。例如:
SELECT *
FROM YourTable
WHERE UPPER(YourColumn) = UPPER('VALUE')
或者,您可以在比较时手动指定排序规则:
SELECT *
FROM YourTable
WHERE YourColumn = 'VALUE' COLLATE SQL_Latin1_General_CP1_CI_AI
答案 1 :(得分:2)
除了使用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
,除非您故意要承担删除重复项的开销。
答案 2 :(得分:0)
不同数据库提供者的语法不同,例如:
<块引用> <块引用>select * from TABLE1 where upper(COL) like 'SOMETHING',, 在 ODCB Provider for Microsoft 中给出语法错误...,正确的语法是: select * from TABLE1 where ucase(COL) like 'SOMETHING' ,即大写
所以你应该使用你的数据库提供者使用的正确语法
谢谢
答案 3 :(得分:-2)
使用下面的代码
选择TOP 300 * 从 (选择 userNo,userName,Place,Birthdate 来自usertable 人员= 2 AND(名字喜欢&#39;%约翰%&#39;) UNION
SELECT
userNo, userName, Place, Birthdate,
FROM usertable2
WHERE personid = 2
AND (Name LIKE '%john%' OR Place LIKE '%NY%') a
ORDER BY userNo