SQL Server中的LIKE运算符未按预期工作
我有以下SQL查询:SQL Server中的LIKE运算符未按预期工作,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有以下SQL查询: select zz.teststring TEST_STRING ,case when zz.teststring like 'JA%' then 'true' else 'false' end [JA%] ,case when zz.teststring like 'J%' then 'true' else 'false' end [J%] ,case when zz.teststring like 'JAA%' then 'true' e
select
zz.teststring TEST_STRING
,case when zz.teststring like 'JA%' then 'true' else 'false' end [JA%]
,case when zz.teststring like 'J%' then 'true' else 'false' end [J%]
,case when zz.teststring like 'JAA%' then 'true' else 'false' end [JAA%]
from
(select 'jaa' teststring) zz
哪个输出
TEST_STRING JA% J% JAA%
jaa false true true
大写/小写没有区别
如果有人能解释为什么
JA%
返回false,我将不胜感激。您需要检查排序规则是否设置为区分大小写:
select
zz.teststring TEST_STRING
,case when zz.teststring like 'JA%' then 'true' else 'false' end [JA%]
,case when zz.teststring like 'J%' then 'true' else 'false' end [J%]
,case when zz.teststring like 'JAA%' then 'true' else 'false' end [JAA%]
from (
select 'jaa' teststring
) zz
select
zz.teststring TEST_STRING
,case when zz.teststring like 'JA%' then 'true' else 'false' end [JA%]
,case when zz.teststring like 'J%' then 'true' else 'false' end [J%]
,case when zz.teststring like 'JAA%' then 'true' else 'false' end [JAA%]
from (
select 'jaa' COLLATE Latin1_General_CS_AS teststring
) zz
对于不区分大小写的,添加COLLATE拉丁语1\u General\u CI\u AS
select
zz.teststring TEST_STRING
,case when zz.teststring like 'JA%' COLLATE Latin1_General_CI_AS then 'true' else 'false' end [JA%]
,case when zz.teststring like 'J%' COLLATE Latin1_General_CI_AS then 'true' else 'false' end [J%]
,case when zz.teststring like 'JAA%' COLLATE Latin1_General_CI_AS then 'true' else 'false' end [JAA%]
from (
select 'jaa' teststring
) zz
编辑:
但是我想知道你是如何得到你的答案的
select
zz.teststring TEST_STRING
,case when zz.teststring like 'JA%' then 'true' else 'false' end [JA%]
,case when zz.teststring like 'J%' then 'true' else 'false' end [J%]
,case when zz.teststring like 'JAA%' then 'true' else 'false' end [JAA%]
from (
select 'jaa' teststring
) zz
select
zz.teststring TEST_STRING
,case when zz.teststring like 'JA%' then 'true' else 'false' end [JA%]
,case when zz.teststring like 'J%' then 'true' else 'false' end [J%]
,case when zz.teststring like 'JAA%' then 'true' else 'false' end [JAA%]
from (
select 'jaa' COLLATE Latin1_General_CS_AS teststring
) zz
谢谢,谜团解决了:
整理丹麦语、挪威语、CI和AI
select
zz.teststring TEST_STRING
,case when zz.teststring like 'JA%' then 'true' else 'false' end [JA%]
,case when zz.teststring like 'J%' then 'true' else 'false' end [J%]
,case when zz.teststring like 'JAA%' then 'true' else 'false' end [JAA%]
from (
select 'jaa' teststring
) zz
select
zz.teststring TEST_STRING
,case when zz.teststring like 'JA%' then 'true' else 'false' end [JA%]
,case when zz.teststring like 'J%' then 'true' else 'false' end [J%]
,case when zz.teststring like 'JAA%' then 'true' else 'false' end [JAA%]
from (
select 'jaa' COLLATE Latin1_General_CS_AS teststring
) zz
在某些语言中,“aa”被视为一个字符。MSSql是大小写-insensitive@HaveNoDisplayName事实并非如此,数据库、表和列可以使用区分大小写的排序规则。在SQLFIDLE中,它返回expacted结果。根据排序规则,我只能得到3倍的true或3倍的false。你使用什么排序法?@JakubLortz尝试使用
COLLATE Danish\u Norwegian\u CI\u AI
,太棒了!没想到。有些语言将aa视为一个字符。@jarlh谢谢你的提示,我用collated Danish\u Norwegian\u CI\u AI
重新创建了这个案例。学习新事物很好