【问题标题】:SQLite syntax for If Else conditionIf Else 条件的 SQLite 语法
【发布时间】:2013-01-29 10:06:25
【问题描述】:

我正在使用 SQLite 数据库。我的表有一个名为“密码”的文本列。之前检索我用来执行简单select * from myTable 查询的值。但现在的要求是,如果密码值不是NULL,那么我需要将其显示为“是”或“否”。是这样的:

select * from myTable
if Password != NULL then Password = 'Yes'
else Password = 'No'

我对此进行了很多搜索,但没有得到任何正确的链接或示例。 任何帮助或建议将不胜感激。

【问题讨论】:

  • 永远不要将任何内容与 NULL (!=NULL) 进行比较。而是使用 IS NULL(IS NOT NULL)。因为这个条件总是错误的NULL=NULL -> FALSE NULL!=NULL -> FALSE
  • 感谢 Valex。我实际上正在使用 ('') 而不是 (IS NOT NULL)
  • 问题很旧,但对于仍在阅读此内容的所有人,请始终使用 IS NULL / IS NOT NULL 作为表达式,==、!= 和 .

标签: sql sqlite


【解决方案1】:
SELECT *,
       CASE WHEN Password IS NOT NULL
       THEN 'Yes'
       ELSE 'No'
       END AS PasswordPresent
FROM myTable

【讨论】:

    【解决方案2】:

    SQLite 使用 CASE WHEN THEN END 语法。你可以在这里阅读更多信息:http://www.sqlite.org/lang_expr.html

    我没有检查语法,但我猜是这样的:

    select * 
    from myTable CASE WHEN Password != NULL THEN Password = 'Yes' ELSE Password = 'No' END;
    

    虽然我不确定这是否可行。如果您尝试根据表中每条记录的密码是否存在来获得“是”或“否”,那么这可能更接近您想要的:

    SELECT Field1, 
        Field2,
        (CASE WHEN Password != NULL THEN 
            'Yes' 
         ELSE 
            'No' 
         END) as 'Password'
    FROM myTable;
    

    同样,我目前无法访问 SQLite 来自己测试它,所以它可能需要一些工作。

    【讨论】:

    • 谢谢尼克。我会尝试处理你的建议。没错,我需要检查每条记录中是否存在密码。但即使在您的第二个建议中使用“select * ...”也会更方便。无论如何,我会尝试实施它们并回复您的反馈。
    • 请注意,Password != NULL 将始终为真,因为无法将某些内容与 NULL 进行比较,就像您无法将任何内容与无内容进行比较一样。你应该改用WHEN Password IS NOT NULL
    【解决方案3】:

    我知道如果密码列中已写入密码,我们希望将密码列的值更改为“YES”,否则我们将值更改为“NO”。

    我们可以使用以下两个查询来进行这些更改:

    UPDATE myTable SET Password = "YES" WHERE Password IS NOT NULL;    
    UPDATE myTable SET Password = "NO" WHERE PASSWORD IS NULL;
    

    【讨论】:

    • 海报没有要求修改表格
    【解决方案4】:

    您可以使用 SQLite v3.32.0+ 中的 IIF() 函数来进一步缩短代码:

    SELECT
      Password,
      IIF(Password IS NOT NULL, 'Yes', 'No') [HasPassword]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-09
      • 2011-07-24
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2021-03-28
      • 1970-01-01
      相关资源
      最近更新 更多