`

sql语句之根据起始结束日期获取每一天、周、月、年【转】

    博客分类:
  • SQL
 
阅读更多
得到两个时间之间的每一天
 
create function [dbo].[fn_GetDateRange](@DATE_START datetime, @DATE_END datetime)
RETURNS TABLE
AS
RETURN
(
SELECT convert(char(10), DATEADD(dd, number, @DATE_START),120) AS DATA_DATE 
FROM    master.dbo.spt_values  as spt
WHERE   type = 'p' AND number <= DATEDIFF(DAY, @DATE_START, @DATE_END)
)
go


得到两个时间之间的每一周
 
CREATE PROCEDURE [dbo].[GetWeekRange]
@tmpDate datetime, @DATE_END datetime
AS
BEGIN
	SET DATEFIRST 1
   DECLARE @index INT
   DECLARE @table TABLE
    (
      WeekTimes INT ,
      FirstDay datetime ,
      EndDay datetime
    )
   DECLARE @YearFistWK INT
   SET @YearFistWK= DATEPART(dw, @tmpDate)
   SET @index = ( SELECT   DATEPART(WEEK, @tmpDate))
   IF ( @YearFistWK = 7 )
    BEGIN 
        SET @index = @index + 1
    END
WHILE @tmpDate <= @DATE_END
    BEGIN
        INSERT  INTO @table
                SELECT  @index ,
                        a.FirstDay ,
                        b.EndDay
                FROM    ( SELECT    1 AS ID ,
                                    DATEADD(wk, DATEDIFF(wk, 0, @tmpDate), 0) AS FirstDAy
                        ) a
                        LEFT JOIN ( SELECT  1 AS ID ,
                                            DATEADD(wk,
                                                    DATEDIFF(wk, 0, @tmpDate),
                                                    6) AS EndDay
                                  ) b ON a.ID = b.ID
 
        SET @tmpDate = DATEADD(DAY, 7, @tmpDate)
        SET @index = @index + 1
		END
		SELECT  WeekTimes, CONVERT(varchar(100), FirstDay, 23) FirstDay,CONVERT(varchar(100), EndDay, 23) EndDay
FROM    @table
END


得到两个时间之间的每个月
CREATE PROCEDURE [dbo].[GetMonthRange] 
@tmpDate datetime, @DATE_END datetime
AS
BEGIN
	DECLARE @table TABLE
    (
	  DateMonth datetime
	)
	WHILE @tmpDate <= @DATE_END
	BEGIN
        INSERT  INTO @table
                SELECT  DATEADD(mm, DATEDIFF(mm, 0, @tmpDate), 0) AS DateMonth
                      
        SET @tmpDate = CONVERT(varchar(7), DATEADD(mm, 1, @tmpDate) , 120) + '-01'
		END
		select CONVERT(varchar(7), DateMonth, 23) DateMonth  from @table
END



得到两个时间之间的每个年份
CREATE PROCEDURE [dbo].[GetYearRange] 
@tmpDate datetime, @DATE_END datetime
AS
BEGIN
DECLARE @table TABLE
    (
	  DateYear datetime
	)
	WHILE @tmpDate <= @DATE_END
	BEGIN
        INSERT  INTO @table
                SELECT  DATEADD(yy, DATEDIFF(yy, 0, @tmpDate), 0) AS DateYear
                      
        SET @tmpDate = CONVERT(varchar(4), DATEADD(yy, 1, @tmpDate) , 120) + '-01-01'
		END
		select CONVERT(varchar(4), DateYear, 23) DateYear  from @table
END


原文:https://blog.csdn.net/weixin_33277597/article/details/82215827
分享到:
评论

相关推荐

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

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

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

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

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

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

    SQL日期获取技巧大全

    本文将深入探讨如何使用SQL获取特定日期,如每年、每月、每季度以及每周的第一天和最后一天,以及特定日期的半夜时间。 首先,我们来看如何获取一个月的第一天。在SQL中,`DATEDIFF()`函数用于计算两个日期之间的...

    SQL Server 查询两个日期之间的所有月份

    `+ '01'`是为了确保日期始终是每月的第一天,以便按月份正确地进行比较。 接下来,通过`WHERE`子句过滤出在这个范围内的月份,并使用`AS [Date]`重命名列名为`Date`,这样结果集中就包含了起始日期和结束日期之间...

    SQL工作日计算,只排除周末

    - 接着,通过循环遍历起始日期与结束日期之间的每一天,并使用`DATEPART`函数确定每一天是否为工作日。 - `DATEPART(Weekday, @dt_begin)`获取当前日期是一周中的第几天(1表示周日,2表示周一,以此类推)。 - `...

    Oracle+SQL精妙SQL语句讲解.txt

    这个查询首先通过`TRUNC(SYSDATE, 'DAY')`将系统当前日期截断到天级别,然后加上一天得到下一个月的第一天,再通过`TRUNC(., 'MONTH')`将其截断到月级别作为当月的第一天。最后,使用`LAST_DAY()`函数获取该月的...

    SQL语句计算两个日期之间有多少个工作日的方法

    这个函数首先检查`@@DATEFIRST`系统变量是否设置为1,因为默认情况下,SQL Server可能将周日设为一周的第一天,而我们需要周一作为第一天。如果设置不正确或日期顺序错误,函数将返回-1。接下来,根据日期是否在同一...

    SQL动态日期列生成并统计

    例如,从起始日期开始,每次递增一天,直到达到结束日期。这种方法可以灵活地适应任何日期范围,但要注意防止无限循环。 2. **字符串拼接函数**:如`CONCAT`或`+`操作符(在某些数据库系统中),可以用于组合字符串...

    12个用一条语句写成的有关日期函数

    同样提供了两种方法,通过RelativeDate函数获取下个月第一天然后减去一天,计算出本月的总天数。 9. 某月某日星期几函数: 输入日期后,返回对应日期是星期几。利用日期和闰年的计算,确定星期的位置。 10. 求...

    获取指定两个日期之间的所以日期

    7. 使用`SimpleDateFormat`格式化每一天的日期,并按照"yyyy"、"mm"、"dd"的格式分割出年、月、日。最后打印出每一天的日期,它会按照"yyyyMMdd"的格式输出。 这样的代码在实际项目中非常实用,尤其是当需要根据...

    Java 实现将每年的节假日,周末,工作日详情记录至数据库表中

    我们可以通过这些类获取每年每一天的详细信息,如判断是否为工作日、周末或节假日。 2. **节假日库**: 为了准确地识别节假日,可以使用第三方库,如`HolidayCalendar`或`ical4j`,它们包含各种国家和地区的公共假期...

    SQL 返回期间内的所有日期

    首先,让我们解析给出的SQL语句: ```sql SELECT rownum AS dateIndex, to_date('20090701', 'yyyy-mm-dd') + rownum - 1 AS DATE_ FROM DUAL CONNECT BY LEVEL &gt;= 1 AND LEVEL (TO_DATE('20090731', 'yyyy-mm-dd'...

    sql server存储过程求一段时间的工作日.docx

    -- 将日期增加一天,进入下一个日期 SET @WorkDate = @WorkDate + 1 END END ``` 在这个存储过程中,`DATEPART(WEEKDAY, @WorkDate)`函数用于获取日期的星期几,其返回值范围是1(周一)到7(周日)。因此,通过...

    MSSQL 计算两个日期相差的工作天数的语句

    工作日的判断是基于日期的星期几(`DATEPART(weekday,dt)`),并结合`@@datefirst`系统变量来处理星期日是否为一周的第一天的情况。 **第二种方法:使用WHILE循环** 这个版本的`f_WorkDay`函数同样接受`@dt_begin`...

    MYSQL实现连续签到功能断签一天从头开始(sql语句)

    - 如果需要记录每用户的连续签到记录,可以创建一个新的字段来保存连续签到的起始日期,然后在插入新签到记录时更新该字段。 总之,实现MySQL中的连续签到功能需要结合数据库设计、数据操作以及适当的查询逻辑。这...

    oracle试题

    - 使用`LAST_DAY`函数来获取每个月最后一天的日期。 - 通过减去天数来计算目标日期。 #### 10. 找出早于12年前受雇的员工 - **SQL语句**: ```sql SELECT ename, job FROM emp WHERE MONTHS_BETWEEN(SYSDATE, ...

Global site tag (gtag.js) - Google Analytics