给一个日期,列出当前日期所在月内所有日期
2012-01-31 21:31
246 查看
整体思路:当前日期月份+1,得到下个月日期,然后将下个月日期第一天-1,得到当前日期的最后一天,从而得知当前月的总天数。
最后结合master..spt_values重构。
需使用master..spt_values系统表重构日期。
先将当前日期的月份+1.得到下个月的日期
例:2012-1-31 月份+1后: 2012-2-29
再截取日期得到下个月月初的日期:
convert( char(07), dateadd(month,1,getdate()),120 )+'-01' --->得到:2012-02-01
再将日期中天数减1,得到当前月份日期的最后一天。
dateadd( day,-1, convert( char(07), dateadd(month,1,getdate()),120 )+'-01' ) --->得到:2012-01-31
然后,获取这个日期的天数。
day( dateadd( day,-1, convert( char(07), dateadd(month,1,getdate()),120 )+'-01' ) ) --->得到 31
最后结合master..spt_values,编写SQL语句:
select dateadd(day,number,convert(varchar(7),getdate(),120)+'-01') da
from master..spt_values
where type='p' and number< day(dateadd(day,-1,convert(char(07),dateadd(month,1,getdate()),120)+'-01'))
另外一种解法:
with ab
as
(
select cast(convert(varchar(7),getdate(),120)+'-01' as datetime) da
union all
select dateadd(day,1,da)
from ab
where dt<dateadd(day,-1,convert(char(07),dateadd(month,1,getdate()),120)+'-01')
)
select * from ab
同理,给一个日期,列出上个月的所有日期天数
select dateadd(day,number,convert(varchar(7),getdate(),120)+'-01') da
from Master..spt_values
where type='p' and number<day(dateadd(day,-1,convert(char(07),getdate(),120)+'-01'))
另外一种解法:
with ab
as
(
select cast(convert(varchar(7),getdate(),120)+'-01' as datetime) da
union all
select dateadd(day,1,da)
from ab
where dt<dateadd(day,-1,convert(char(07),getdate(),120)+'-01')
)
select * from ab
最后结合master..spt_values重构。
需使用master..spt_values系统表重构日期。
先将当前日期的月份+1.得到下个月的日期
例:2012-1-31 月份+1后: 2012-2-29
再截取日期得到下个月月初的日期:
convert( char(07), dateadd(month,1,getdate()),120 )+'-01' --->得到:2012-02-01
再将日期中天数减1,得到当前月份日期的最后一天。
dateadd( day,-1, convert( char(07), dateadd(month,1,getdate()),120 )+'-01' ) --->得到:2012-01-31
然后,获取这个日期的天数。
day( dateadd( day,-1, convert( char(07), dateadd(month,1,getdate()),120 )+'-01' ) ) --->得到 31
最后结合master..spt_values,编写SQL语句:
select dateadd(day,number,convert(varchar(7),getdate(),120)+'-01') da
from master..spt_values
where type='p' and number< day(dateadd(day,-1,convert(char(07),dateadd(month,1,getdate()),120)+'-01'))
另外一种解法:
with ab
as
(
select cast(convert(varchar(7),getdate(),120)+'-01' as datetime) da
union all
select dateadd(day,1,da)
from ab
where dt<dateadd(day,-1,convert(char(07),dateadd(month,1,getdate()),120)+'-01')
)
select * from ab
同理,给一个日期,列出上个月的所有日期天数
select dateadd(day,number,convert(varchar(7),getdate(),120)+'-01') da
from Master..spt_values
where type='p' and number<day(dateadd(day,-1,convert(char(07),getdate(),120)+'-01'))
另外一种解法:
with ab
as
(
select cast(convert(varchar(7),getdate(),120)+'-01' as datetime) da
union all
select dateadd(day,1,da)
from ab
where dt<dateadd(day,-1,convert(char(07),getdate(),120)+'-01')
)
select * from ab
相关文章推荐
- 用vbs实现按创建日期的顺序列出一个文件夹中的所有文件
- windows编写一个小bat脚本 列出当前目录下所有的文件名到一个文本文件
- 取得当前日期所在的星期里从星期一到星期日所有的日期列表
- 写一个通用的copy(String 原始路径,String 新路径),能复制所有文件,且名字和后缀名与源文件一致,在名字前拼接当前日期使用Scanner写入路径
- 计算当前日期所在星期内的所有日期
- 计算一个日期所在星期内的所有日期
- 计算一个日期所在星期内的所有日期
- 获取当前月份的所有日期
- WinDBG技巧:列出当前进程所有装载的模块(DLL/EXE)
- MYSQL 列出某个月或是已知日期范围内的所有日期
- 列出本年度所有星期天的日期
- sublimetext写插件实现复制当前文件的文件名到剪贴板和列出所有的文件名
- Oracle:列出当前用户下可见的所有表名及权限…
- 有一个纯字符串,编写一段代码,列出其所有字符的大小写组合 如 :字符串“ji”,字母组合['ji','jI','Ji','JI'] 即每个字符的大小写组合
- [Android Pro] 获取手机已经安装的应用 和 获取当前正在运行的所有进程(一个uid对应多个pid)
- 如何用Java代码列出一个目录下所有的文件?
- 用户输入一个数字,在控制台中列出它的所有约数。
- ORALCE 中查询当前月的所有日期
- 列出一个工作簿中所有已使用的自定义函数
- sql创建 自定义函数返回当前日期所在月的第一天最后一天