sql数据库问题

qq_36772310 2018-07-03 04:24:12
在输入条件的时候是精确到天例如 2018-02-05 2018-03-06
在查询的时候是精确到月份 就是说我输入上面的日期但是查询的时候是查两个月的数据(2,3月份)
sql语句这么写 字段类型是datetime
...全文
199 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinger126 2018-07-05
  • 打赏
  • 举报
回复
引用 4 楼 xnnfan 的回复:
select * from 表 where month(时间字段) >=month(时间变量1) and month(时间字段) <=month(时间变量2)

你这样是有问题的,如果只想查2018年2月和3月的数据,这样弄会把其他年度的2月、3月的数据查出来,而且在条件字段上使用函数,会导致索引失效(如果这个时间字段上有索引的话)
xnnfan 2018-07-05
  • 打赏
  • 举报
回复
select * from 表 where month(时间字段) >=month(时间变量1) and month(时间字段) <=month(时间变量2)
吉普赛的歌 版主 2018-07-04
  • 打赏
  • 举报
回复
--追求效率应这样写
--加索引
create index ix_表_时间字段 on 表(时间字段);

--查询
SELECT *
FROM 表
WHERE 时间字段>'2018-02-01' and 时间字段<'2018-03-01'
union
SELECT *
FROM 表
WHERE 时间字段>'2018-03-01' and 时间字段<'2018-04-01'

shinger126 2018-07-04
  • 打赏
  • 举报
回复
像这样的问题,一般是如下几种解决方案:1.在表上增加一个期间的冗余列,可以为计算列,其值为yyyy-mm或者YYYYMM,在这个字段上创建索引
2.在一个月的数据写入完成后做结转,按期间yyyymm汇总,写入到期间汇总表
3.将年月条件参数化,然后转化为日期范围,像2楼那样查询
二月十六 版主 2018-07-03
  • 打赏
  • 举报
回复
SELECT *
FROM 表
WHERE DATEDIFF(MONTH, '2018-02-05', 时间字段) = 0
OR DATEDIFF(MONTH, '2018-03-06', 时间字段) = 0;

34,590

社区成员

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

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