如何在SQL Server中写入文字布尔值?查看示例用法:
select * from SomeTable where PSEUDO_TRUE
另一个样本:
if PSEUDO_TRUE
begin
select 'Hello, SQL!'
end
注意:上面的查询与我将如何使用它无关。这只是测试文字布尔值。
如何在SQL Server中写入文字布尔值?查看示例用法:
select * from SomeTable where PSEUDO_TRUE
另一个样本:
if PSEUDO_TRUE
begin
select 'Hello, SQL!'
end
注意:上面的查询与我将如何使用它无关。这只是测试文字布尔值。
IS TRUE
,IS UNKNOWN
等(虽然SQL-99标准提供)。常见的解决方法是使用CHAR(1)
受约束的列CHECK (col1 IN ('T', 'F'))
。
Answers:
True
,并False
至少在SQL脚本语法糖。
true
或false
,而是真实值(不是0)和虚假值(0)。C99添加了stdbool.h,它仅定义了这些宏,但是在后期处理中,任何这样的值都分别替换为1和0。
大多数数据库将接受此:
select * from SomeTable where true
但是,某些数据库(例如SQL Server,Oracle)没有布尔类型。在这些情况下,您可以使用:
select * from SomeTable where 1=1
顺便说一句,如果手动建立一个sql where子句,这是简化代码的基础,因为您可以避免必须知道要添加到where子句中的条件是否是第一个条件(该条件之前应加上"WHERE"
),或随后的一个(应在之前"AND"
)。始终以开头"WHERE 1=1"
,所有添加到where子句的条件(如果有)都以开头"AND"
。
An expression of non-boolean type specified in a context where a condition is expected, near 'group'
我正在使用MSSQL
SQL
不对MSSQL
。
根据微软的说法:用于搜索的语法是
[ WHERE <search_condition> ]*
搜索条件为:
<search_condition> ::=
{ [ NOT ] <predicate> | ( <search_condition> ) }
[ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ]
[ ,...n ]
谓词是:
<predicate> ::=
{ expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression
如您所见,您始终必须编写两个表达式进行比较。这里的搜索条件是 布尔表达式,例如1 = 1,a!= b
不要将搜索表达式与布尔常量(例如'True'或'False')混淆。您可以将布尔常量分配给BIT变量
DECLARE @B BIT
SET @B='True'
但是在TSQL中,您不能使用布尔常量而不是像这样的布尔表达式:
SELECT * FROM Somewhere WHERE 'True'
不起作用。
但是您可以使用布尔常量来构建双面搜索表达式,如下所示:
SEARCH * FROM Somewhere WHERE 'True'='True'
SQL Server没有文字的true或false值。1=1
在极少数情况下,您需要使用该方法(或类似方法)。
一种选择是为true和false创建自己的命名变量
DECLARE @TRUE bit
DECLARE @FALSE bit
SET @TRUE = 1
SET @FALSE = 0
select * from SomeTable where @TRUE = @TRUE
但是这些仅存在于该批次的范围内(您必须在要使用它们的每个批次中重新声明它们)
case when exists( select 1 from project.quota_group_supplier qgs with (nolock) where qgs.project_quota_id=qg.project_quota_id) then @TRUE else @FALSE end
您可以使用值'TRUE'
和'FALSE'
。从https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/bit-transact-sql:
可以将字符串值TRUE和FALSE转换为位值:将TRUE转换为1,将FALSE转换为0。
select 'TRUE' where 'TRUE'
。它既不能在选择上下文中有意义地使用,在哪里也不能工作。SQL解析器抱怨'TRUE'不是布尔值。同样select TRUE where TRUE
在两个部分均无效。总而言之。它通常不适用于MS-SQL。
WHERE column = 'TRUE'
或的值时确实可以IF @value = 'FALSE'
。
如何在SQL Server中写入文字布尔值?
从SomeTable中选择*,其中PSEUDO_TRUE
哪有这回事。
您必须将值与使用进行比较= < > like ...
。在SQL Server中最接近布尔值的是bit。那就是可以有值的整数null
,0
和1
。
您应该考虑一个“真实值”是除0以外不仅是1的所有内容。因此,应该写1 <> 0而不是1 = 1。
因为当您使用参数(@param <> 0)时,您可能会遇到一些转换问题。
最了解的是Access,它将控件上的True值转换为-1而不是1。
我质疑在TSQL中使用布尔值的价值。每当我开始希望布尔值和For循环时,我就意识到自己正在像C程序员而不是SQL程序员那样处理问题。当我换档时,问题变得微不足道了。
在SQL中,您正在处理数据集。“ WHERE BOOLEAN”无效,因为它不会更改正在使用的设置。您需要将每一行与某些内容进行比较,以使filter子句生效。表/结果集是一个iEnumerable,SELECT语句是一个FOREACH循环。
是的,“ WHERE IsAdmin = True”比“ WHERE IsAdmin = 1”更易于阅读
是的,在动态生成TSQL时,“ WHERE True”比“ WHERE 1 = 1,...”更好。
也许将布尔值传递给存储的proc可能会使if语句更具可读性。
但是大多数情况下,TSQL中包含的IF,WHILE和Temp表越多,则重构的可能性就越大。