【问题标题】:SQL View does not accept Subclause [duplicate]SQL 视图不接受子条款 [重复]
【发布时间】:2018-06-24 21:30:02
【问题描述】:

我需要从表中的字符串字段中获取视图中的布尔字段。如果字符串被填充,布尔字段应该是True

SELECT (MasterId IS NOT NULL) AS HasMaster FROM entries

但是,这会导致错误:

关键字“IS”附近的语法不正确

为什么会这样以及如何解决?

【问题讨论】:

  • 你需要通过case表达式来检查。
  • SQL SERVER 没有布尔类型。试试CASE WHEN blah THEN 1 ELSE 0 END
  • 尝试谷歌搜索 CASE WHEN 语句
  • T-SQL 有布尔表达式,但这些表达式永远不能用于需要值的地方,只能在条件子句中使用(IFWHERECASE 等)。是的,这是语言的缺陷。

标签: sql sql-server tsql


【解决方案1】:

试试下面的代码:

SELECT CAST(CASE WHEN MasterId IS NULL THEN 0 ELSE 1 END AS BIT) [HasMaster]
FROM entries

【讨论】:

    【解决方案2】:

    试试这个,

    SELECT (CASE WHEN MasterId IS NOT NULL THEN 1 ELSE 0 END) AS HasMaster 
    FROM  entries
    

    SQL Server 中没有布尔值,因此您可以在此处的CASE 表达式中使用'0''1'

    【讨论】:

      【解决方案3】:

      问题:我需要从表中的字符串字段中获取视图中的布尔字段。如果字符串已填充,则布尔字段应为 True

      答案:使用case

      select case when MasterId is null then 0 else 1 end
      from table_name
      

      【讨论】:

      • 严格来说 01not 布尔值 - 至少在 SQL 标准中不是。但由于 SQL Server 不支持布尔值,这是一种解决方法。
      • 提示,不要重复Answer中的Question,只要回答就够了。
      • youtube 链接有什么相关性?我认为这是你的,你想向它发送垃圾邮件?
      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 2012-10-14
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      相关资源
      最近更新 更多