【问题标题】:Querying Sql Server 2005 with bit data type column使用位数据类型列查询 Sql Server 2005
【发布时间】:2014-05-30 17:48:52
【问题描述】:

这不适用于 sql server 2005

select * from [mytablename] where [mybitcolumn] <> 1

我不得不使用...

select * from [mytablename] where (([mybitcolumn] is null) or ([mybitcolumn]=0))

是否有替代语法可以获取 mybitcolum 1 的行?

【问题讨论】:

  • 使用两个条件有什么问题?
  • 列中可能不允许有NULL?
  • Andriy M:我没有对数据的 DML 访问权限,并且没有零/假值来测试这两个条件是否真的有效。我最终制作了一个表格,我可以操纵数据来测试它,它确实有效。

标签: sql-server tsql sql-server-2005


【解决方案1】:

你可以这样做:

select * from [mytablename] where isnull([mybitcolumn], 0) = 0

虽然只是稍微好一点。

或者,我不太愿意建议,你关闭ANSI NULLS。例如:

set ansi_nulls on
go

if (1 != null)
    print 'This will not print equal because NULL is a third boolean value.'

set ansi_nulls off
go

if (1 != null)
    print 'Not equal since we told SQL Server to treat null as any other value'

也可以看看Three-valued logic

【讨论】:

  • @Yuck...where isnull(mybitcolumn,'False') = 'False' AND ...where isnull(mybitcolumn,0) = 0 都可以解决问题
【解决方案2】:

由于1 被视为true;使用where [mybitcolumn] &lt;&gt; 1,您正试图获得false 场景。如果你像下面这样尝试会怎样

select * from [mytablename] where [mybitcolumn] = 'false'

如果mybitcolumn 包含NULL 那么你可以使用ISNULL 函数

select * from [mytablename] where ISNULL([mybitcolumn],0) = 'false'

【讨论】:

  • 由于 mybitcolumn 中的空值导致 OP 显然存在问题,因此您的答案将失败。
  • OP 想要在一个条件下捕获 NULL 和 0。您的建议只能捕获 0。
  • @Rahul - 你的最后一个建议很接近。我发现以下两种方法都有效: ...where isnull(mybitcolumn,'False') = 'False' AND ...where isnull(mybitcolumn,0) = 0
猜你喜欢
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多