`
suiliangxiang
  • 浏览: 69114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

纠正网上流传的SQL取某一时间的当月第一天和最后一天的时间写法

SQL 
阅读更多

网上取当月第一天和最后一天的SQL语句很多,有的是通过字符截取,有的是通过函数,个人还是比较偏向于使用内置函数来处理,
但是看了下网上的运用函数来取第一天和最后一天时间的SQL语句几乎都像下面这样的,其实是存在问题的,存在一个临界值得问题。
本月第一天:select   dateadd(dd,-day(getdate())+1,getdate())  
本月最后一天:select   dateadd(dd,-day(getdate()),dateadd(m,1,getdate()))
上面的两句,第一句取第一天的完全没问题,第二句就有问题了,一般的想法是取最后一天,可以在当前时间上加一个月,然后减去当前
时间的天数,比如随便2009-8-27,加一个月就是2009-9-27,然后减去2009-8-27时间的天数27天 正好是2009-8-31,没问题呀。但是,
如果当前时间本身就是最后一天的话,就会产生临界问题了,比如传入的实际是2009-5-31,最终得到的最后一天的时间其实也应该是
2009-5-31才对,如果按照上面的写法,2009-5-31加一个月是多少,2009-6-31?2009-7-1?都不是,由于月大月小的问题,6月份只有
30天,所以2009-5-31加一个月后是2009-6-30日,还是按上面的写法然后再减去2009-5-31时间的天数31天,最终得到的最后一天是
2009-5-30,傻眼了,咋回事啊?还有2月只有28或29天当然也会存在这样的问题,只要稍微改动一下,在减天数的时候不应减当前时间
的天数,而应减去加了月份之后的天数,如下写法:
select   dateadd(dd,-day(dateadd(m,1,getdate())),dateadd(m,1,getdate()))
这样的话,即使6月没有31天,2009-6-30减去30天就是2009-5-31,再如2009-1-30加一个月是2009-2-28,减去28天后是2009-1-31符合
正确性。

分享到:
评论
1 楼 ejzhang 2011-01-10  
更简单的方法就是取本月第一天加上一个月再减一天

相关推荐

    ORACLE获取周月季年的第一天和最后一天

    在Oracle数据库中,获取特定时间范围的第一天和最后一天对于数据查询和分析至关重要。以下将详细解释如何使用SQL语句来获取周、月、季、年以及上月、前一天、上一小时的开始和结束日期。 1. **本周** 获取本周的第...

    SQL Server中获取第一天、最后一天

    这里的关键在于`DATEDIFF`函数首先计算了当前日期与零日期(即1900年1月1日)之间的月份数差,然后`DATEADD`函数根据这个差值添加相应数量的月份到零日期上,最后通过添加0天的方式确保结果为该月的第一天。...

    计算本月和上个月的第一天和最后一天(SQL Server)

    在SQL Server中,计算当前月份和上个月的第一天和最后一天是常见的日期处理任务,尤其在数据统计和报告中非常有用。以下是如何使用SQL Server来完成这个任务的详细方法。 首先,我们需要理解SQL Server中的日期函数...

    sql语句查询周月年季的最后或第一天

    ### 二、SQL语句实现周、月、年、季度的第一天和最后一天 #### 1. 查询某个月的第一天和最后一天 - **第一天**: ```sql SELECT DATEADD(day, -DATEPART(day, GETDATE()) + 1, GETDATE()) ``` 或者 ```sql ...

    SQL SERVER 获取年、季、月、周、日开始时间和结束时间

    time: 返回的时间点,如果时间点为8点,返回的结束时间为第二天的8点,例如获取8月最后一天的结束时间,以8点计,则返回值为 2022-09-01 07:59:59.997 select dbo.GetDateStartFirstAndLast('-q','s','2022-08-03',...

    PB脚本中SQL语句写法与SQL中语句写法对照

    PB脚本中SQL语句写法与SQL中语句写法对照 PB脚本中SQL语句写法与SQL中语句写法对照是非常重要的知识点,因为PB脚本和SQL语言在写法和应用中有所不同。本文将对PB脚本中SQL语句写法和SQL中语句写法进行对比和分析。 ...

    SQL语句,查询当月,当年数据

    ### SQL语句:查询当月、当年数据及本周数据 #### 概述 在数据库管理与数据分析领域,针对特定时间段内的数据查询是非常常见的需求之一。本文将详细介绍如何使用SQL语句来查询当前月份、当年以及本周的数据。这些...

    mysql只取年月日的SQL写法.sql

    mysql只取年月日的SQL写法

    sqlserver 计算当月所有自然周的区间。

    - 使用`DATEADD()`函数获取指定月份的下个月第一天,然后减去当前月份最后一天的日期得到当前月份的结束日期。 - 开始日期设置为当前月份的第一天。 - **计算周的数量**:根据月份的开始日期和结束日期计算出包含...

    sql学习 集合写法.sql

    sql学习 集合写法.sql

    显示所在月份第一天及最后一天的日期的SQL语句

    用于显示每月第一天及最后一天的日期值,有利于进行日期数据信息的统计

    sql去掉最后一个字符

    sql去掉最后一个字符,sql去掉最后一个字符

    高级SQL写法

    高级SQL写法

    DB2常用SQL写法

    `CASE`语句则提供了一种条件赋值的机制,类似于`COALESCE`函数,可以根据条件返回第一个非空值。 游标的使用在数据库操作中常见,DB2支持静态和动态游标。`DECLARE CURSOR`用于定义游标,`WITH RETURN TO CLIENT`...

    SQL销售明细大佬写法.sql

    SQL销售明细大佬写法.sqlSQL销售明细大佬写法.sql SQL销售明细大佬写法.sqlSQL销售明细大佬写法.sql SQL销售明细大佬写法.sql

    SQL Server时间算法

    通过计算当前日期与当月第一天之间的天数差,再将该差值减去当前日期即可得到当月的第一天。 ### 小结 通过上述示例可以看出,在SQL Server中利用内置的日期函数(如`DATEADD`, `DATEDIFF`, `DATEPART`等)可以...

    sql_按照某一个字段进行去重后获取全部字段

    根据提供的文件信息,本文将详细解释如何通过 SQL 语句实现按照某一字段去重后获取所有字段的操作。在实际工作中,我们经常会遇到需要对数据表中的记录进行去重的情况,尤其是当某个字段作为唯一标识符时,我们希望...

    ( java JDBC连接不同的数据库写法sql,oracle,mysql

    java JDBC连接不同的数据库写法sql,oracle,mysql 的很好例子

    整理的SQL日期函数语句

    9. **本年的第一天和最后一天**:使用`DATEADD`和`DATEDIFF`计算出一年的起始和结束日期。 10. **本季度的第一天**:同样,`DATEADD`和`DATEDIFF`结合使用可以找到当前季度的第一天。 11. **本周的星期一**:`...

    使用sql语句查询的数据按时间递增累加

    根据提供的文件信息,本文将详细解释如何使用SQL语句实现数据的时间递增累加功能。在实际业务场景中,这种需求非常常见,特别是在财务、库存管理或者数据分析等领域,需要跟踪随时间变化的数据趋势。 ### 一、理解...

Global site tag (gtag.js) - Google Analytics