如果列具有特定值,则返回 true
Posted
技术标签:
【中文标题】如果列具有特定值,则返回 true【英文标题】:Return true if column has specific value 【发布时间】:2017-10-10 02:32:05 【问题描述】:我有一个数据库,创建者决定使用 smallint
而不是 bit
来判断真/假场景。 False
用0
表示。 True
用 -1
表示。我想翻译这个,最好用比CASE
更简单的语法。有什么办法可以做这样的事情:
SELECT (column == -1) 'value_as_bool'
FROM myTable
这会(在大多数语言中)将该列翻译回真/假列...
【问题讨论】:
SQL 有 TRUE 和 FALSE 作为布尔值。 @jarlh 我知道,但创建表的人显然决定忽略这一点。所以我坚持使用-1
和0
。而且有很多这样的列,所以如果我必须使用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
值转换为bit
。 0
将是 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 引用不返回任何项目
返回特定行,在列中级联结果 - 如果没有 1 则多个 2,否则如果没有 2 则 3,否则如果没有 3,则多个 4