SQL 查询中单引号的使用

Xar*_*ord 5 mysql sql apostrophe

我有以下 SQL 查询:

SELECT id_zam AS test, 
     CASE WHEN (SELECT something FROM sth WHERE id_something = test) = 1 
          THEN 
              'true' 
          ELSE 
              'false'  
     END as test_result
FROM testTable
Run Code Online (Sandbox Code Playgroud)

something等于 1。所以 CASE 语句为 TRUE,所以它将执行THEN语句'true'

但是当我test像这样在别名周围添加单引号时:

SELECT id_zam AS 'test', 
     CASE WHEN (SELECT something FROM sth WHERE id_something = 'test') = 1 
          THEN 
              'true' 
          ELSE 
              'false'  
     END as test_result
FROM testTable
Run Code Online (Sandbox Code Playgroud)

查询返回'false'。谁能解释为什么它们不同?

Ada*_*331 4

单引号(或撇号,如果您愿意)用于表示字符串(有时是日期),但不表示整数值。

我假设你id_something是一个整数变量。如果是这种情况,问题在于您尝试将整数与字符串进行比较,这将始终返回 false。

在第一个示例中,您选择了一个整数并为其指定了别名test。当您进行比较时,您正在比较两个有效的整数。然而,一旦你将其更改为'test'你现在就有了一个字符串,它与id_zam. 当您比较整数和字符串时,它默认返回 false。

编辑 这对于别名来说是正确的,但不一定始终正确。在这个例子中 yes,test是一个别名,并且'test'是一个字符串文字,因此它们将被区别对待。然而,在MySQL默认情况下,单引号不会影响其他项目的比较。例如,如果您有一个带条件的查询,1 = '1'这将返回 true。请参阅此答案的评论以获取其他解释。

再次强调和简化,如果您想使用别名来比较某些内容,请不要使用单引号。