在SQL查询中使用单引号

时间:2014-10-20 16:03:20

标签: 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

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

查询返回'false'。有谁可以解释为什么他们不同?

2 个答案:

答案 0 :(得分:3)

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

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

在第一个示例中,您选择了一个整数并为其指定了别名test。进行比较时,您要比较两个有效的整数。但是,一旦将其更改为'test',您现在就拥有一个字符串,该字符串与id_zam无关。当您对整数和字符串进行比较时,默认情况下返回false。

修改 这对于别名是正确的,但不一定都是真的。在此示例中,test是别名,'test'是字符串文字,因此它们将被区别对待。但是,根据MySQL默认值,单引号不会影响其他项的比较。例如,如果您的条件为1 = '1',则返回true。请参阅此答案的评论以获得其他解释。

如果要使用别名比较某些内容,要重新强调并简化,请不要使用单引号。

答案 1 :(得分:-1)

因为这个子查询,你得到了错误:

SELECT something FROM sth WHERE id_something = 'test'

不会返回等于1的单个记录。