这个SQL怎么写

楠小南 2016-05-19 04:05:49
只有一个表,字段 ID , name , Time

查询条件有两种,第一种 查询 ID,name 条件是 Time > getdate()
第二种 查询 ID,name 条件是 Time < getdate()

想将两结果合在一起,用 union all 吗。
可是当 time 变了 第一种 查询不到记录的时候,就只会显示第二种;
也就是只有一条记录,我都不知道是哪一种了。
...全文
150 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
楠小南 2016-05-20
  • 打赏
  • 举报
回复
引用 11 楼 shoppo0505 的回复:
[quote=引用 10 楼 q363186 的回复:] [quote=引用 9 楼 shoppo0505 的回复:] [quote=引用 8 楼 q363186 的回复:] [quote=引用 3 楼 wmxcn2000 的回复:] 不知道是哪个查询出的结果?
id name time 1 0 2016/5/19 10:03:00 2 0 2016/5/19 10:06:00 3 1 2016/5/19 10:09:00 4 0 2016/5/19 10:12:00 5 0 2016/5/19 10:15:00 .......... 一直延伸 例如现在时间是2016/5/19 10:10:00 就是说我查询有两种条件的 第一种 是select top(1) id from admin where time > 大于当前时间 第二种 是time 小于当前时间 并且 name 不等于 0 怎么合并结果集 。 当name 全部为 0 结果集就只有第一种数据了 要是分两次查询 就好搞了。[/quote] 你不是最后还会union all 起来么[/quote] 不想查询两次才 union all 起来的, 因为要分开两处显示的。 [/quote] 那你存储过程的输入参数要添加一个查找方式,不然sql不知道怎么查[/quote] 还是分开查询吧! 不然数据容易出错
shoppo0505 2016-05-20
  • 打赏
  • 举报
回复
引用 10 楼 q363186 的回复:
[quote=引用 9 楼 shoppo0505 的回复:] [quote=引用 8 楼 q363186 的回复:] [quote=引用 3 楼 wmxcn2000 的回复:] 不知道是哪个查询出的结果?
id name time 1 0 2016/5/19 10:03:00 2 0 2016/5/19 10:06:00 3 1 2016/5/19 10:09:00 4 0 2016/5/19 10:12:00 5 0 2016/5/19 10:15:00 .......... 一直延伸 例如现在时间是2016/5/19 10:10:00 就是说我查询有两种条件的 第一种 是select top(1) id from admin where time > 大于当前时间 第二种 是time 小于当前时间 并且 name 不等于 0 怎么合并结果集 。 当name 全部为 0 结果集就只有第一种数据了 要是分两次查询 就好搞了。[/quote] 你不是最后还会union all 起来么[/quote] 不想查询两次才 union all 起来的, 因为要分开两处显示的。 [/quote] 那你存储过程的输入参数要添加一个查找方式,不然sql不知道怎么查
楠小南 2016-05-20
  • 打赏
  • 举报
回复
引用 9 楼 shoppo0505 的回复:
[quote=引用 8 楼 q363186 的回复:] [quote=引用 3 楼 wmxcn2000 的回复:] 不知道是哪个查询出的结果?
id name time 1 0 2016/5/19 10:03:00 2 0 2016/5/19 10:06:00 3 1 2016/5/19 10:09:00 4 0 2016/5/19 10:12:00 5 0 2016/5/19 10:15:00 .......... 一直延伸 例如现在时间是2016/5/19 10:10:00 就是说我查询有两种条件的 第一种 是select top(1) id from admin where time > 大于当前时间 第二种 是time 小于当前时间 并且 name 不等于 0 怎么合并结果集 。 当name 全部为 0 结果集就只有第一种数据了 要是分两次查询 就好搞了。[/quote] 你不是最后还会union all 起来么[/quote] 不想查询两次才 union all 起来的, 因为要分开两处显示的。
shoppo0505 2016-05-20
  • 打赏
  • 举报
回复
引用 8 楼 q363186 的回复:
[quote=引用 3 楼 wmxcn2000 的回复:] 不知道是哪个查询出的结果?
id name time 1 0 2016/5/19 10:03:00 2 0 2016/5/19 10:06:00 3 1 2016/5/19 10:09:00 4 0 2016/5/19 10:12:00 5 0 2016/5/19 10:15:00 .......... 一直延伸 例如现在时间是2016/5/19 10:10:00 就是说我查询有两种条件的 第一种 是select top(1) id from admin where time > 大于当前时间 第二种 是time 小于当前时间 并且 name 不等于 0 怎么合并结果集 。 当name 全部为 0 结果集就只有第一种数据了 要是分两次查询 就好搞了。[/quote] 你不是最后还会union all 起来么
楠小南 2016-05-19
  • 打赏
  • 举报
回复
引用 3 楼 wmxcn2000 的回复:
不知道是哪个查询出的结果?
id name time 1 0 2016/5/19 10:03:00 2 0 2016/5/19 10:06:00 3 1 2016/5/19 10:09:00 4 0 2016/5/19 10:12:00 5 0 2016/5/19 10:15:00 .......... 一直延伸 例如现在时间是2016/5/19 10:10:00 就是说我查询有两种条件的 第一种 是select top(1) id from admin where time > 大于当前时间 第二种 是time 小于当前时间 并且 name 不等于 0 怎么合并结果集 。 当name 全部为 0 结果集就只有第一种数据了 要是分两次查询 就好搞了。
楠小南 2016-05-19
  • 打赏
  • 举报
回复
引用 5 楼 shoppo0505 的回复:
楼主这种需求很奇葩,这得要多凑巧才能把getdate()的数据过滤掉. getdate()是带毫秒的
感觉这个不是重点啊。 实际项目肯定不会用getdate() ,会用 Now.ToString("yyyy/MM/dd HH:mm:ss") 代替的
楠小南 2016-05-19
  • 打赏
  • 举报
回复
引用 4 楼 u014480754 的回复:
一个大于当前日期,一个小于当前日期,不如直接写!=getdate
非也非也! 例如! id time 1 2016/5/19 10:00:00 2 2016/5/19 10:03:00 3 2016/5/19 10:06:00 4 2016/5/19 10:09:00 假如 现在时间是 2016/5/19 10:02:00 如果 直接写!=getdate 会把所有记录都查到的。 用 time > getdate 的话 就查到 2,3,4 用 time < getdate 的话 就查到 1
shoppo0505 2016-05-19
  • 打赏
  • 举报
回复
楼主这种需求很奇葩,这得要多凑巧才能把getdate()的数据过滤掉. getdate()是带毫秒的
yingdediyi 2016-05-19
  • 打赏
  • 举报
回复
一个大于当前日期,一个小于当前日期,不如直接写!=getdate
卖水果的net 版主 2016-05-19
  • 打赏
  • 举报
回复
不知道是哪个查询出的结果?
bobby46 2016-05-19
  • 打赏
  • 举报
回复
加一个标记字段 SELECT ID,name,'1' flag WHERE Time > getdate() UNION ALL SELECT ID,name,'2' flag WHERE Time< getdate() 或者 SELECT ID,name,CASE WHEN Time > getdate() THEN '1' ELSE '2' END flag WHERE Time<>getdate() 程序中得到结果集后,可以通过flag字段进行判断属于哪种情况
Ginnnnnnnn 2016-05-19
  • 打赏
  • 举报
回复
最好列出一下测试数据,更容易理解你的意思

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧