Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server中的LIKE运算符未按预期工作_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

SQL Server中的LIKE运算符未按预期工作

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

我有以下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' 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
重新创建了这个案例。学习新事物很好