dum*_*dad 22 sql sql-server select equality
我正在使用Microsoft SQL Server 2012,我想运行这个看似简单的查询:
SELECT
FirstEvent.id AS firstEventID,
SecondEvent.id AS secondEventID,
DATEDIFF(second, FirstEvent.WndFGEnd, SecondEvent.WndFGStart) AS gap,
FirstEvent.TitleID = SecondEvent.TitleID AS titlesSameCheck
FROM VibeFGEvents AS FirstEvent
RIGHT OUTER JOIN VibeFGEvents AS SecondEvent
ON
FirstEvent.intervalMode = SecondEvent.intervalMode
AND FirstEvent.id = SecondEvent.id - 1
AND FirstEvent.logID = SecondEvent.logID
Run Code Online (Sandbox Code Playgroud)
但是FirstEvent.TitleID = SecondEvent.TitleID AS titlesSameCheck在SELECT子句中语法不正确.但SELECT子句(Transact-SQL)文档包含以下语法:
SELECT [ ALL | DISTINCT ]
[ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]
<select_list>
<select_list> ::=
{
*
| { table_name | view_name | table_alias }.*
| {
[ { table_name | view_name | table_alias }. ]
{ column_name | $IDENTITY | $ROWGUID }
| udt_column_name [ { . | :: } { { property_name | field_name }
| method_name ( argument [ ,...n] ) } ]
| expression
[ [ AS ] column_alias ]
}
| column_alias = expression
} [ ,...n ]
Run Code Online (Sandbox Code Playgroud)
我认为这意味着表达式在select子句中是有效的,实际上给出的例子包括类似的东西1 + 2.看着为表现形式的文档:
{ constant | scalar_function | [ table_name. ] column | variable
| ( expression ) | ( scalar_subquery )
| { unary_operator } expression
| expression { binary_operator } expression
| ranking_windowed_function | aggregate_windowed_function
}
Run Code Online (Sandbox Code Playgroud)
布尔等式检查是有效的表达式,实际上=(等于)(Transact-SQL)文档中给出的示例表达式包括一个:
SELECT DepartmentID, Name
FROM HumanResources.Department
WHERE GroupName = 'Manufacturing'
Run Code Online (Sandbox Code Playgroud)
虽然在WHERE条款中没有该SELECT条款.看起来我不能使用=等于运算符来比较我的SELECT子句中的表达式,因为它们被错误地解释为赋值.
如何FirstEvent.TitleID = SecondEvent.TitleID AS titlesSameCheck在my SELECT子句中包含等效的布尔相等列比较?
Dum*_*dan 31
像这样:
case when FirstEvent.TitleID = SecondEvent.TitleID then 1 else 0 end as titlesSameCheck
Run Code Online (Sandbox Code Playgroud)
pyr*_*ade 14
您不能直接使用布尔类型,条件语句除外(case,where,having等)
解决问题的最佳方法是做类似的事情
select case when x = y then 'true' else 'false' end
Run Code Online (Sandbox Code Playgroud)
该bit类型可能最接近布尔值.
select CAST(case when x = y then 1 else 0 end as bit)
Run Code Online (Sandbox Code Playgroud)
当然,使用最能代表你所追求的两个值.