请教一段关于从数据中根据日期取数的sql语句

lqsmn613 2010-07-06 05:55:58
注:我的数据库时sql server的
有张order表,里面有三个属性,一个id,一个startdate,一个enddate。其中后面两个日期的格式是1/31/2010,即月/日/年
我现在想要取到每个月所在的所以数据

比如:6月份的,6月1号在startdate和enddate中的这条数据,到6月底那天所在的那条数据,中间的也全部都要。

我自己写了一个,不过有点问题,就是在取不是1月或12月的时候,每次都会多出一条该年最后一个月的最后一条数据,为什么呢?sql语句如下:

select w.id,cast(w.startdate as datetime) startdate,cast(w.enddate as datetime) enddate
from order w where cast(year(w.startdate) as varchar)+'-'+cast(month(w.startdate) as varchar) <= '2010-7'
and cast(year(w.enddate) as varchar)+'-'+cast(month(w.enddate) as varchar) >= '2010-7'


取得的效果如下,多了最后那条数据:
183 2010-06-28 00:00:00.000 2010-07-04 00:00:00.000
184 2010-07-05 00:00:00.000 2010-07-11 00:00:00.000
185 2010-07-12 00:00:00.000 2010-07-18 00:00:00.000
186 2010-07-19 00:00:00.000 2010-07-25 00:00:00.000
187 2010-07-26 00:00:00.000 2010-08-01 00:00:00.000
209 2010-12-27 00:00:00.000 2011-01-02 00:00:00.000


请高人指点下,谢谢!
...全文
141 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dr_lou 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lqsmn613 的回复:]
引用 5 楼 dr_lou 的回复:
拼来拼去的累不累?

累啊,您给指条明路?
[/Quote]

MSSQL有DATE函数
shan1119 2010-07-07
  • 打赏
  • 举报
回复
CONVERT(nvarchar(7), w.startdate, 121) <= '2010-07' and
CONVERT(nvarchar(7), w.enddate, 121) >= '2010-07'
lqsmn613 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dr_lou 的回复:]
拼来拼去的累不累?
[/Quote]
累啊,您给指条明路?
酒剑仙 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lqsmn613 的回复:]
引用 1 楼 javaalpha 的回复:
Java code
>= '2010-7'

什么意思,不是很明白
[/Quote]
'2010-7' >2010-12
209 2010-12-27 00:00:00.000 2011-01-02 00:00:00.000
如果要照你这么写的话 还需要一个<'2010-8'的条件
dr_lou 2010-07-07
  • 打赏
  • 举报
回复
拼来拼去的累不累?
dr_lou 2010-07-07
  • 打赏
  • 举报
回复
牛叔 2010-07-07
  • 打赏
  • 举报
回复
oracle熟悉点
to_char就解决了
lqsmn613 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 javaalpha 的回复:]
Java code
>= '2010-7'
[/Quote]
什么意思,不是很明白
JavaAlpha 2010-07-06
  • 打赏
  • 举报
回复
>= '2010-7'

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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