SQL查询排除日期和其他条件之间的数据
全部, 第一次在这里张贴海报。我正在尝试创建一个查询,其中我希望排除日期范围之间的数据,但也包含某些代码SQL查询排除日期和其他条件之间的数据,sql,Sql,全部, 第一次在这里张贴海报。我正在尝试创建一个查询,其中我希望排除日期范围之间的数据,但也包含某些代码 Date: (substring(CAST(UTCBigintToUTCTime(starttime) as varchar(19)),0,11) not between '2012-05-08%' and '2012-05-10% 状态代码: 状态代码不在'58'和'59'中 排除满足这两个条件的数据时,我的语句会是什么样子?我所做的一切都不包括该日期范围内的所有内容和状态代码范围内的
Date:
(substring(CAST(UTCBigintToUTCTime(starttime) as varchar(19)),0,11) not between '2012-05-08%' and '2012-05-10%
状态代码:
状态代码不在'58'和'59'中
排除满足这两个条件的数据时,我的语句会是什么样子?我所做的一切都不包括该日期范围内的所有内容和状态代码范围内的所有内容
提前谢谢。SQL新手,但正在学习:。在我看来,您似乎有点过虑了,使它变得比需要的更复杂。 而让它变得如此复杂,尤其是带有否定逻辑,也会让它表现不佳 比如说:
select * from myTable where starttime < '2012-05-08' and starttime > '2012-05-10' and statuscode < 58 and statuscode > 59
不确定您使用的是什么数据库,或者您的数据类型到底是什么-根据需要稍微调整,但尽可能避免令人讨厌的日期/字符串转换和“非”条件。试试这个
select * from myTable where convert(date,starttime) not between '2012-05-08' and '2012-05-10' and statuscode not in (58,59)
让我知道。谢谢你的回复,灰胡子极客,但这不排除5/8-5/10的任何内容吗?我需要的是仍然报告5/8和5/10的数据,但状态代码不是58或59。在这个范围内,还有许多其他代码需要考虑。基本上,我正在创建的报告是一个失败报告,但我想排除这种组合,因为这是由于我正在运行的一些不需要报告的测试。上述方法有一点问题:确保在比较之前将starttime转换为date而不是datetime。否则将在结果中包含“2012-05-10 09:30:00”,因为它大于“2012-05-10 00:00:00”