Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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案例条件_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

理解SQL案例条件

理解SQL案例条件,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我试图更好地理解SQL Case函数的工作原理 例如,假设我在查询中有以下代码,value1='ABCDE' SELECT CASE ColumnName WHEN value1 LIKE '%ABC%' THEN 'Hello' WHEN value1 LIKE '%CDE%' THEN 'World' ELSE 'Nothing' END AS Answer FROM TableName 我对这段代码将返回的内

我试图更好地理解SQL Case函数的工作原理

例如,假设我在查询中有以下代码,value1='ABCDE'

SELECT CASE ColumnName
           WHEN value1 LIKE '%ABC%' THEN 'Hello'
           WHEN value1 LIKE '%CDE%' THEN 'World'
           ELSE 'Nothing'
       END AS Answer
FROM TableName
我对这段代码将返回的内容感到困惑

通过阅读,我假设它应该返回HelloWorld,但运行了类似的查询后,我发现它只返回Hello

有人能解释为什么会这样吗


谢谢

CASE表达式由一系列
WHEN
/
THEN
子句组成。每个子句测试一个条件


CASE
表达式在计算结果为true的第一个
条件时停止,然后返回
值。在您的示例中,这将是“你好”

注意:如果在
WHEN
子句中有条件,则
CASE
之后的
ColumnName
是一个语法错误。我认为这是一个输入错误,因为您的查询返回了一些内容

如果要串联这些值,请使用以下表达式:

SELECT ((CASE WHEN value1 LIKE '%ABC%' THEN 'Hello' ELSE '' END) +
        (CASE WHEN value1 LIKE '%CDE%' THEN 'World' ELSE '' END)
       ) AS Answer
FROM TableName;

CASE
表达式由一系列
WHEN
/
THEN
子句组成。每个子句测试一个条件


CASE
表达式在计算结果为true的第一个
条件时停止,然后返回
值。在您的示例中,这将是“你好”

注意:如果在
WHEN
子句中有条件,则
CASE
之后的
ColumnName
是一个语法错误。我认为这是一个输入错误,因为您的查询返回了一些内容

如果要串联这些值,请使用以下表达式:

SELECT ((CASE WHEN value1 LIKE '%ABC%' THEN 'Hello' ELSE '' END) +
        (CASE WHEN value1 LIKE '%CDE%' THEN 'World' ELSE '' END)
       ) AS Answer
FROM TableName;

同时出现时,我最好说“在
大小写之后的
列名
谓词
之后的
是一个语法错误。”@Gordon Linoff请检查这个@NeerajPrasadSharma。我同意这可能是一个错误。但问题是
案例
返回什么。如果不严格地解释“短路”,那么可以在返回任何内容之前对所有表达式进行求值。这些可能会返回一个错误。@GordonLinoff那么,如果第一个语句被发现为true,它会跳过其他语句吗?或者它也比较了其他的吗?我最好说“在
CASE
之后的
ColumnName
predicate
之后的
WHEN
同时是一个语法错误。”@Gordon Linoff请检查这个@NeerajPrasadSharma。我同意这可能是一个错误。但问题是
案例
返回什么。如果不严格地解释“短路”,那么可以在返回任何内容之前对所有表达式进行求值。这些可能会返回一个错误。@GordonLinoff那么,如果第一个语句被发现为true,它会跳过其他语句吗?或者它是否也能与其他产品进行比较??