如果列具有特定值,则返回 true

Posted

技术标签:

【中文标题】如果列具有特定值,则返回 true【英文标题】:Return true if column has specific value 【发布时间】:2017-10-10 02:32:05 【问题描述】:

我有一个数据库,创建者决定使用 smallint 而不是 bit 来判断真/假场景。 False0 表示。 True-1 表示。我想翻译这个,最好用比CASE 更简单的语法。有什么办法可以做这样的事情:

SELECT (column == -1) 'value_as_bool'

FROM   myTable

这会(在大多数语言中)将该列翻译回真/假列...

【问题讨论】:

SQL 有 TRUE 和 FALSE 作为布尔值。 @jarlh 我知道,但创建表的人显然决定忽略这一点。所以我坚持使用-10。而且有很多这样的列,所以如果我必须使用CASE,我的语法会很乱。 @Stephen 我更改了示例以使其更清楚我想要什么(希望如此) @jarlh:TSQL 没有布尔数据类型,所以SELECT (column = -1) AS value_as_bool FROM myTable 失败并出现异常。 提示:使用适当的软件(mysql、Oracle、DB2 等)和版本标记数据库问题很有帮助,例如sql-server-2014。语法和功能的差异通常会影响答案。 【参考方案1】:

您可以使用 IIF 功能。用法; IIF (boolean_expression, true_value, false_value)

【讨论】:

这比CASE 简单,但我在让它工作时遇到了一些麻烦。我试过这样IIF(column = -1, 1, 0) 你应该像这样使用 SELECT IIF(column = 0, 0, 1) 但我忘了说 IIF 来自 SQL 2012。【参考方案2】:

您可以在 IF/ELSE 语句中设置后声明一个变量并返回它,例如:

DECLARE @Result Bit

IF column =-1  
    SET @Result = 0
ELSE
    SET @Result = 1
RETURN @Result

Here for more Info关于 SQL 中的布尔值:

在 Management Studio 中,它显示为假/真值(至少在 最新版本)。

当通过 ASP.NET 访问数据库时,它会暴露字段 作为布尔值。

希望对您有所帮助。

【讨论】:

【参考方案3】:

在一个案例中,语句将是:

myTable.column = -1 then 0 else 1 end as [NAME] 的情况

如果你愿意,你可以用 FALSE 和 TRUE 替换 0 和 1,这在 SQL 中使用 BOOLEAN/bit 类型:)

【讨论】:

一般语法是 case when [statement with boolean output] then [value if true] when [statement with boolean output] then [value if true] when ... else [value if all of the above是假的] 结束(之后可能是 'as [#NAME#]' 如何控制输出?如果我使用 0 和 1,那么它会输出为 bit 还是某种 integer 您可以使用 CONVERT 函数来控制它,例如使用: CONVERT(smallint,1) ,它将 1 转换为 smallint。功能文档:w3schools.com/sqL/func_convert.asp【参考方案4】:

我认为最简单的解决方案是将int 值转换为bit0 将是 False 其他所有内容 True

SELECT CAST(column As Bit) 'value_as_bool'
FROM   myTable

【讨论】:

我认为你是对的。我只需要忍受性能影响。 如果您可以更改架构,您始终可以将持久计算列添加到表中并使用它。您不会受到任何性能影响。 单引号是字符串分隔符。它是标准 SQL 中名称的双引号和 SQL Server AFAIK 中的括号。但是由于value_as_bool 已经是一个有效的名称,所以您根本不需要分隔符。 @ThorstenKettner 它适用于单引号,但也适用于单引号。我更喜欢避免使用双引号,因为查询将在 VBA 中使用,其中双引号将结束字符串... @Noceo:最好有没有任何引号的有效名称。对名称使用单引号(根据标准 SQL)无效有其限制。试试看:SELECT 'value_as_bool' FROM (SELECT CAST(column As Bit) 'value_as_bool' FROM myTable) t.

以上是关于如果列具有特定值,则返回 true的主要内容,如果未能解决你的问题,请参考以下文章

如果 char(2) 的列具有两个空格的默认值,则 Linq 引用不返回任何项目

SQL 聚合具有相同 id 的行,辅助列中的特定值

如果值相等,则合并一个特定列的单元格

返回特定行,在列中级联结果 - 如果没有 1 则多个 2,否则如果没有 2 则 3,否则如果没有 3,则多个 4

如何遍历列,检查任何列中是不是存在特定值,改变新列并输入 1 如果存在,如果不存在则输入 0?

Pandas:如果特定列满足特定条件,则选择行