这是计算一个月第一天的SQL 脚本: SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

先来 2010-02-28 04:36:08
一个月的第一天



这是计算一个月第一天的SQL 脚本:
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
这个脚本的工作原理??
...全文
1000 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
稻草_木偶 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 feixianxxx 的回复:]
SQL code
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
===>
--1
DATEDIFF(mm,0,getdate()求出本月和1900年一月差几个月
--2
DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 将0(即1900-01-01)加上上面求出的月 就是本月的第一天了
[/Quote]
学习了~
先来 2010-03-03
  • 打赏
  • 举报
回复
前一个月最后一天的sql脚本
select DATEADD(DD,-1,convert(varchar(8),getdate(),21)+'01')
hchjjun 2010-03-02
  • 打赏
  • 举报
回复
自然月每月第一天容易得到,关键是如果客户自定义月末的月初值的算法
yjh53615728 2010-03-01
  • 打赏
  • 举报
回复
学习……再学习
回复内容 回复内容太短了!
huilei_001 2010-03-01
  • 打赏
  • 举报
回复
学习了 每天回帖即可获得10分可用分(纯引用)
SQL77 2010-03-01
  • 打赏
  • 举报
回复
引用 1 楼 happyflystone 的回复:
select cast(0 as datetime) 
-----------------------
1900-01-01 00:00:00.000

(1 行受影响)

DATEDIFF(mm,0,getdate()) -- 得到与1900-01-01相关多少个月

DATEADD(mm, M, 0) --m即上面得到相差的月份,0代表1900-01-01 ,加上相关的月分就是这个月的第一天

UP..............
cailee 2010-03-01
  • 打赏
  • 举报
回复
select cast(convert(char(8),getdate(),120)+'01' as datetime)
cailee 2010-03-01
  • 打赏
  • 举报
回复
引用楼主 xianlaioy 的回复:
一个月的第一天



这是计算一个月第一天的SQL 脚本:
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
这个脚本的工作原理??

0在sqlserver里面是1900-1-1 0:00:00
select cast(0 as datetime) --1900-01-01 00:00:00.000

这天是星期一,是第一个季度,是第一个星期,是第一个月的第一天等等。所以很多东西都可以靠这个日期来计算。
select DATEDIFF(mm,0,getdate()) 计算1900年到现在共多少个月
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 加上距离的月份就得到这个月的第一天
Mr_Nice 2010-03-01
  • 打赏
  • 举报
回复
[以1900-1-1作为参照]
select DATEDIFF(mm,0,getdate()) --与1900-1-1差几个月
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --在1900-1-1的基础上加上相差的月份数,得到的日期即为当月第一天

[所有月的第一天都是-01,所以就得到月份就行了.]
select convert(char(7),getdate(),120)+'-01'


继续学习...........
wkzhx 2010-03-01
  • 打赏
  • 举报
回复
我也来一个

select convert(datetime,convert(varchar(8),getdate(),120)+'01')
feixianxxx 2010-02-28
  • 打赏
  • 举报
回复
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
===>
--1
DATEDIFF(mm,0,getdate()求出本月和1900年一月差几个月
--2
DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 将0(即1900-01-01)加上上面求出的月 就是本月的第一天了
bancxc 2010-02-28
  • 打赏
  • 举报
回复
学习了 每天回帖即可获得10分可用分
-狙击手- 2010-02-28
  • 打赏
  • 举报
回复
简单点:

select convert(char(7),getdate(),120)+'-01'
-狙击手- 2010-02-28
  • 打赏
  • 举报
回复
select cast(0 as datetime) 
-----------------------
1900-01-01 00:00:00.000

(1 行受影响)

DATEDIFF(mm,0,getdate()) -- 得到与1900-01-01相关多少个月

DATEADD(mm, M, 0) --m即上面得到相差的月份,0代表1900-01-01 ,加上相关的月分就是这个月的第一天

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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