代码之家  ›  专栏  ›  技术社区  ›  Laughing Vergil

SQL Server-位数据类型与字符串“true”和“false”匹配

  •  1
  • Laughing Vergil  · 技术社区  · 6 年前

    我不确定我正在使用的数据库是否做了一些特殊的工作,但是在优化旧代码时,我遇到了以下(净化的)查询:

    SELECT Code
    FROM GovernmentThing
    WHERE IsGovernment = 'True'
    

    我检查了数据类型 IsGovernment 假设它是 varchar(5) 或者类似的事情,结果发现 bit 字段。

    然后我假设代码是错误的,并通过运行返回 政府 字段。令我惊讶的是,我发现查询只返回 政府 设置为1!从那时起,我就想知道,对字符串文字的检查是什么? 'False' 我测试过,会返回,只是为了发现只返回了零值!你看!

    有可能我错过了TSQL更新中的某个地方,或者是有一些复杂的配置使这个工作正常,但是…我以前从没听说过这个。

    有人能开导我吗?这是在什么地方记录的,还是?是吗?

    SQL Server 2012

    1 回复  |  直到 6 年前
        1
  •  2
  •   Dan Guzman    6 年前

    这是 bit data type documentation 它描述了这种行为:

    字符串值true和false可以转换为位值:true 被转换为1,而false被转换为0。