哪里条件。 != 在两个字段中
Where conditions. != in two fields
这个查询给了我想要的东西,但它不是很好 ;)
select *
from sel, (
select * from sel where ttype = 15) as dl15
where ttype = 16
and sel.code = dl15.code
and convert(varchar,dl15.vdate,0)+convert(varchar, dl15.vtime,0) !=
convert(varchar,sel.vdate,0)+convert(varchar, sel.vtime,0)
也许有人可以帮我把这个条件convert(varchar,dl15.vdate,0)+convert(varchar, dl15.vtime,0) != convert(varchar,sel.vdate,0)+convert(varchar, sel.vtime,0)
转换成更正确的形式
子查询结果:
id code vdate vtime
2000983484 3374347 Feb 1 2020 12:00AM Dec 30 1899 7:05PM
没有最后条件的结果
id code vdate vtime
2000983885 3374347 Feb 6 2020 12:00AM Dec 30 1899 8:00AM
2000983485 3374347 Feb 1 2020 12:00AM Dec 30 1899 7:43PM
2000952328 3374347 Feb 1 2020 12:00AM Dec 30 1899 7:05PM
需要结果
id code vdate vtime
2000983885 3374347 Feb 6 2020 12:00AM Dec 30 1899 8:00AM
2000983485 3374347 Feb 1 2020 12:00AM Dec 30 1899 7:43PM
这个更好:
select *
from sel
join (select * from sel where ttype = 15) as dl15
on sel.code = dl15.code
and convert(varchar,dl15.vdate,0)+convert(varchar, dl15.vtime,0) !=
convert(varchar,sel.vdate,0)+convert(varchar, sel.vtime,0)
where ttype = 16 -- here add an table alias sel or dl15
假设:
vdate/vtime
属于 datetime
类型,包括要忽略的 (milli/micro) 秒(因此 convert(...,0)
)
- 需要两个表中的所有列
一个查询思路:
select s15.*,s16.*
from sel s15
join sel s16
on s15.code = s16.code
and s15.ttype = 15
and s16.ttype = 16
where ( convert(varchar,s15.vdate,0) != convert(varchar,s16.vdate,0)
or convert(varchar,s15.vtime,0) != convert(varchar,s16.vtime,0)
)
where
子句的变体,因为 smalldatetime
精确到分钟(即 smalldatetime
没有秒):
where ( convert(smalldatetime,s15.vdate) != convert(smalldatetime,s16.vdate)
or convert(smalldatetime,s15.vtime) != convert(smalldatetime,s16.vtime)
)
如果 vdate/vtime
属于 smalldatetime
类型,那么就不需要调用 convert()
:
where ( s15.vdate != s16.vdate
or s15.vtime != s16.vtime
)
这个查询给了我想要的东西,但它不是很好 ;)
select *
from sel, (
select * from sel where ttype = 15) as dl15
where ttype = 16
and sel.code = dl15.code
and convert(varchar,dl15.vdate,0)+convert(varchar, dl15.vtime,0) !=
convert(varchar,sel.vdate,0)+convert(varchar, sel.vtime,0)
也许有人可以帮我把这个条件convert(varchar,dl15.vdate,0)+convert(varchar, dl15.vtime,0) != convert(varchar,sel.vdate,0)+convert(varchar, sel.vtime,0)
转换成更正确的形式
子查询结果:
id code vdate vtime
2000983484 3374347 Feb 1 2020 12:00AM Dec 30 1899 7:05PM
没有最后条件的结果
id code vdate vtime
2000983885 3374347 Feb 6 2020 12:00AM Dec 30 1899 8:00AM
2000983485 3374347 Feb 1 2020 12:00AM Dec 30 1899 7:43PM
2000952328 3374347 Feb 1 2020 12:00AM Dec 30 1899 7:05PM
需要结果
id code vdate vtime
2000983885 3374347 Feb 6 2020 12:00AM Dec 30 1899 8:00AM
2000983485 3374347 Feb 1 2020 12:00AM Dec 30 1899 7:43PM
这个更好:
select *
from sel
join (select * from sel where ttype = 15) as dl15
on sel.code = dl15.code
and convert(varchar,dl15.vdate,0)+convert(varchar, dl15.vtime,0) !=
convert(varchar,sel.vdate,0)+convert(varchar, sel.vtime,0)
where ttype = 16 -- here add an table alias sel or dl15
假设:
vdate/vtime
属于datetime
类型,包括要忽略的 (milli/micro) 秒(因此convert(...,0)
)- 需要两个表中的所有列
一个查询思路:
select s15.*,s16.*
from sel s15
join sel s16
on s15.code = s16.code
and s15.ttype = 15
and s16.ttype = 16
where ( convert(varchar,s15.vdate,0) != convert(varchar,s16.vdate,0)
or convert(varchar,s15.vtime,0) != convert(varchar,s16.vtime,0)
)
where
子句的变体,因为 smalldatetime
精确到分钟(即 smalldatetime
没有秒):
where ( convert(smalldatetime,s15.vdate) != convert(smalldatetime,s16.vdate)
or convert(smalldatetime,s15.vtime) != convert(smalldatetime,s16.vtime)
)
如果 vdate/vtime
属于 smalldatetime
类型,那么就不需要调用 convert()
:
where ( s15.vdate != s16.vdate
or s15.vtime != s16.vtime
)