2012-11-12 60 views
21

如果我通过:MYSQL案例在MySQL查询检查零

case guides.Gud_Publish_Date 
    when null then "Unscheduled" 
    else "Forth Coming Titles" 
    end 

则考虑所有为空连Gud_Publish_Date具有价值也。完整的SQL语句是

SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , (
     CASE guides.Gud_Publish_Date 
      WHEN NULL 
       THEN "Unscheduled" 
      ELSE "Forth Coming Titles" 
      END 
     ) AS Schedules 
FROM guides 

任何人都可以帮助我吗?在此先感谢

+2

琐碎,但我相信即将到来的是一个词。 – marvin

+0

[Conditional NOT NULL case SQL]可能的重复(http://stackoverflow.com/questions/4821031/conditional-not-null-case-sql) – nawfal

回答

44

尝试使用IF

SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , IF(guides.Gud_Publish_Date IS NULL,'Unscheduled','Forth Coming Titles') 
      AS Schedules 
FROM guides 

,或者如果你真的想CASE

SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , (
     CASE 
      WHEN guides.Gud_Publish_Date IS NULL 
      THEN 'Unscheduled' 
      ELSE 'Forth Coming Titles' 
     END 
    ) AS Schedules 
FROM guides 
+0

显示错误 /* SQL错误(1064):您有一个错误在你的SQL语法中;检查与您的MySQL服务器版本相对应的手册,以便在第3行附近使用'guides.Gud_Publish_Date IS NULL','Unscheduled','Forth Coming Titles'')作为附表'使用的正确语法*/ 但是,Case语句正在工作。 感谢您的帮助 – user1023242

+0

您真的在使用'mysql'吗? :D,因为我提供的代码都工作。 –

+0

[MySQL中的Inline IF和CASE语句:*请单击此处*](http://timmurphy.org/2009/08/13/inline-if-and-case-statements-in-mysql/) –

2
SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , (
     CASE WHEN guides.Gud_Publish_Date IS NULL 
      THEN "Unscheduled" 
      ELSE "Forth Coming Titles" 
      END 
     ) AS Schedules 
FROM guides 
-2

试试这个

SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , coalesce((
     CASE guides.Gud_Publish_Date 
      WHEN NULL 
       THEN 'Unscheduled' 
      ELSE 'Forth Coming Titles' 
      END 
     ), 'Unscheduled') AS Schedules 
FROM guides 
+1

这不起作用。当NULL时,CASE表达式会错过条目并返回'Forth Coming Titles';因为它不是NULL,所以COALESCE返回相同的值。 – Diego

5

我发现这个-a情侣几个月的职位。使用COALESCE选项,意在通过拉詹,你可以做,

SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , CASE COALESCE(guides.Gud_Publish_Date, 0) 
      WHEN 0 THEN 'Unscheduled' 
       ELSE 'Forth Coming Titles' 
      END AS Schedules 
FROM guides 

上面的代码假定guides.Gud_Publish_Date不能取0个,这是我能做到,因为它是一个日期。如果不是这种情况,你可以将0改为另一个不能用的值;也许你最喜欢的浮点数如3.1415或空标识符'null'

+0

清洁,安全,直观阅读。 ++ – SteveCinq