SQL Server学习记录之获取每月每季度每年第一天和最后一天

DECLARE@dtdatetime
SET@dt=GETDATE()

DECLARE@numberint
SET@number=3

--1.指定日期该年的第一天或最后一天
--A. 年的第一天
SELECTCONVERT(char(5),@dt,120)+‘1-1‘

--B. 年的最后一天
SELECTCONVERT(char(5),@dt,120)+‘12-31‘

--2.指定日期所在季度的第一天或最后一天
--A. 季度的第一天
SELECTCONVERT(datetime,
    CONVERT(char(8),
        DATEADD(Month,
            DATEPART(Quarter,@dt)*3-Month(@dt)-2,
            @dt),
        120)+‘1‘)

SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0) 

--B. 季度的最后一天(CASE判断法)
SELECTCONVERT(datetime,
    CONVERT(char(8),
        DATEADD(Month,
            DATEPART(Quarter,@dt)*3-Month(@dt),
            @dt),
        120)
    +CASEWHENDATEPART(Quarter,@dt) in(1,4)
        THEN‘31‘ELSE‘30‘END)

--C. 季度的最后一天(直接推算法)
SELECTDATEADD(Day,-1,
    CONVERT(char(8),
        DATEADD(Month,
            1+DATEPART(Quarter,@dt)*3-Month(@dt),
            @dt),
        120)+‘1‘)

--3.指定日期所在月份的第一天或最后一天
--A. 月的第一天
SELECTCONVERT(datetime,CONVERT(char(8),@dt,120)+‘1‘)

--B. 月的最后一天
SELECTDATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+‘1‘)

--C. 月的最后一天(容易使用的错误方法)
SELECTDATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))

--4.指定日期所在周的任意一天
SELECTDATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)

--5.指定日期所在周的任意星期几
--A.  星期天做为一周的第1天
SELECTDATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)

--B.  星期一做为一周的第1天
SELECTDATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
时间: 2024-10-06 06:58:59

SQL Server学习记录之获取每月每季度每年第一天和最后一天的相关文章

SQL Server学习记录Day1

最近在学习SQL Server 数据库,用的版本是2008 R2的版本,如下图所示,本人学习时间不长,写这篇文章一是为了锻炼自己加深印象,二也可以与和诸多朋友进行交流以及得到大家的指教. 安装教程网上有很多,可以自行去搜索,但是安装时有一些小细节,在安装到实例配置的时候,如果没有安装过其它版本的SQL SERVER,请选择默认实例,如果有安装过,则手工指定实例.如果一台电脑安装了多个实例的SQL SERVER,每个实例的端口是不一样的,当在软件中设置服务器连接地址时需要注意,例如:192.168

【SQL Server 学习系列】-- 获取字符串中出现某字符的次数及字符某次出现的下标

DECLARE @Str NVARCHAR(500) = '1_BB_CC_DD_AA_EE_YY_WW_HH_GG' --// 1. 获取下划线在字符串中出现的次数 SELECT LEN(@Str) - LEN(REPLACE(@Str, '_', '')) --// 2. 获取下划线某次出现的位置下标 IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[IndexNumOfStr]') AND t

(转)SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)

这是计算一个月第一天的SQL 脚本:   SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --当月的第一天 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0) --上个月的第一天 SELECT DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))  --当月的最后一天 SELECT DATEADD(ms,-3,DATEADD(mm, DATE

SQL server学习

慕课网sql server学习 数据库第一印象:desktop--web server--database server** 几大数据库:sql server.oracle database.DB2.MySql.MongoDB.....(SQL结构性查询语言) 安装软件:SQL Server Management Studio 附加.分离(attach.detach)数据库文件: 数据库图表关系图: 关系型数据库: 二维表.主键.外键 T-SQL简介: T-SQL query--从数据库中查询索

【SQL Server 学习系列】-- sql 随机生成中文名字

原文:[SQL Server 学习系列]-- sql 随机生成中文名字 1 DECLARE @fName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)) -- 姓氏 2 DECLARE @lName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)) -- 名字 3 4 INSERT @fName VALUES 5 ('赵'),('钱'),('孙'),('李')

C# 获取某月的第一天和最后一天

/// <summary>        /// 取得某月的第一天        /// </summary>        /// <param name="datetime">要取得月份第一天的时间</param>        /// <returns></returns>        private DateTime FirstDayOfMonth(DateTime datetime)        { 

DateTime获取一个月的第一天和最后一天

DateTime dtTarget = DateTime.Now; DateTime FirstDay = dtTarget.AddDays(-DateTime.Now.Day + 1); DateTime LastDay = dtTarget.AddMonths(1).AddDays(-dtTarget.AddMonths(1).Day); DateTime获取一个月的第一天和最后一天

SQL Server之记录筛选(top、ties、offset)汇总

一.TOP 筛选 如果有 ORDER BY 子句,TOP 筛选将根据排序的结果返回指定的行数.如果没有 ORDER BY 子句,TOP 筛选将按照行的物理顺序返回指定的行数. 1. 返回指定数目的行 TOP 用于指示从查询结果集返回指定数目的行. 例如,返回前2行记录 SELECT TOP (2) ColumnA, ColumnB FROM Table1 2. 返回指定百分比的行 可以使用百分比,如果遇到百分比的计算结果不是整数,将向上舍入(即“进一法”,而不是“四舍五入”或“截尾取整”).例如

使用SQL Server Audit记录数据库变更

    最近工作中有一个需求,就是某一个比较重要的业务表经常被莫名其妙的变更.在SQL Server中这类工作如果不事前捕获记录的话,无法做到.对于捕获变更来说,可以考虑的选择包括Trace,CDC.但Trace的成本比较大,对于负载量较高的系统并不合适,而CDC需要影响业务库,因此SQL Server Audit就是一个比较好的选择.      在SQL Server中,如果只是希望获得表的更新时间,只需要看表的聚集索引的最后更新时间即可,代码如下: SELECT OBJECT_NAME(O