sql server 查询日期中的常用语句, 例如本周第一天, 年内的第几周,有用

--本周第一天   

SELECT DATEADD(Day,1-(DATEPART(Weekday,getdate())[email protected]@DATEFIRST-1)%7,getdate())  

--or   

select dateadd(wk, datediff(wk,0,getdate()), 0)  

--本周第一天   

select dateadd(wk, datediff(wk,0,getdate()), 6)  

  

--上月第一天   

SELECT CONVERT(CHAR(10),DATEADD(month,-1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111)  

--上月最后一天   

SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()),0)),111)+‘ 23:59:59‘

--本月第一天   

select dateadd(dd,-datepart(dd,getdate())+1,getdate())  

--本月最后一天   

select dateadd(dd,-datepart(dd,getdate()) ,dateadd(mm,1,getdate()))  

--本月天数   

select datediff(dd,dateadd(dd,-datepart(dd,getdate())+1,getdate()), dateadd(dd,-datepart(dd,getdate())+1,dateadd(mm,1,getdate())))  

--or   

select datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(getdate()) as varchar)+‘-‘+cast(month(getdate()) as varchar)+‘-01‘ as datetime))))  

  

--下月第一天   

select dateadd(dd,-datepart(dd,getdate())+1,dateadd(mm,1,getdate()))  

--下月最后一天   

SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+2,0)),111)+‘ 23:59:59‘

--季度第一天   

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

--季度最后一天(直接推算法)   

SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1+DATEPART(Quarter,getdate())*3-Month(getdate()),getdate()),120)+‘1‘)  

--季度的最后一天(CASE判断法)   

select DATEADD(Month,DATEPART(Quarter,getdate())*3-Month(getdate()),getdate())  

  

--本月第一个星期一   

SELECT DATEADD(wk, DATEDIFF(wk, ‘‘, DATEADD(dd, 6 - DAY(getdate()), getdate())), ‘‘)   

--去年最后一天   

SELECT   dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))   

--今年第一天   

SELECT   DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0)   

--今年最后一天   

SELECT  dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1,0))  

  

--指定日期所在周的任意一天   

SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)--5.指定日期所在周的任意星期几   

--A.  星期天做为一周的第1天   

SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)[email protected]@DATEFIRST-1)%7,@dt)  

--B.  星期一做为一周的第1天   

SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)[email protected]@DATEFIRST-2)%7-1,@dt)  

---周内的第几日   

select datepart(weekday,getdate()) as 周内的第几日  

--年内的第几周   

select datepart(week,getdate()) as 年内的第几周  

--年内的第几季   

select datepart(quarter,getdate()) as 年内的第几季  

  

  

--判断某天是当月的第几周的sql函数    

CREATE   FUNCTION   WeekOfMonth(@day datetime)     

RETURNS int

AS

begin

  

----declare @day datetime   

declare @num int

declare @Start datetime  

declare @dd int

declare @dayofweek char(8)  

declare @dayofweek_num char(8)  

declare @startWeekDays int

---set @day=‘2009-07-05‘   

if datepart(dd,@day)=1  

return 1  

else

set @Start= (SELECT   DATEADD(mm,   DATEDIFF(mm,0,@day),   0)) --一个月第一天的   

set @dayofweek= (datename(weekday,@Start)) ---得到本月第一天是周几   

set @dayofweek_num=(select (case @dayofweek when ‘星期一‘ then 2  

when ‘星期二‘ then 3  

when ‘星期三‘ then 4  

when ‘星期四‘ then 5  

when ‘星期五‘ then 6  

when ‘星期六‘ then 7  

when ‘星期日‘ then 1  

end))  

set @dayofweek_num= [email protected]_num+1 ---得到本月的第一周一共有几天   

---print @dayofweek_num   

   set @dd=datepart(dd,@day----得到今天是这个月的第几天   

--print @dd   

if @dd<[email protected]_num --小于前一周的天数   

return 1  

else

set @[email protected]@dayofweek_num  

if @dd % 7=0  

     begin

       set @[email protected] / 7  

        return @num+1  

         

     end

   else --if @dd % 7<>0   

     

     set @[email protected] / 7  

set @[email protected]+1+1  

       return @num  

end

时间: 2024-08-04 00:35:05

sql server 查询日期中的常用语句, 例如本周第一天, 年内的第几周,有用的相关文章

SQL Server 查询处理中的各个阶段(SQL执行顺序)

SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理. 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入.这些虚拟表对调用者(客户端应用程序或者外部查询)不可用.只是最后一步生成的表才会返回 给调用者.如果没有在查询中指定某一子句,将跳过相应的步骤.下面是对应用于SQL server 2000和SQL Server 2005的各个逻辑

sql Server获取表中今天、昨天、本周、上周、本月、上月等数据

在做Sql Server开发的时候有时需要获取表中今天.昨天.本周.上周.本月.上月等数据,这时候就需要使用DATEDIFF()函数及GetDate()函数了.DATEDIFF ( datepart , startdate , enddate )释义:计算时间差datepare值:year | quarter | month | week | day | hour | minute | second | millisecondstartdate:开始日期enddate :结束日期GetDate(

SQL Server查询中特殊字符的处理方法

SQL Server查询中,经常会遇到一些特殊字符,比如单引号"'"等,这些字符的处理方法,是SQL Server用户都应该需要知道的. 我们都知道SQL Server查询过程中,单引号"'"是特殊字符,所以在SQL Server查询的时候要转换成双单引号"''".但这只是特殊字符的一个,在实际项目中,发现对于like操作还有以下特殊字符:下划线"_",百分号"%",方括号"[]"以及尖

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何在SQL Server存储过程中获取另一存储过程的执行结果记录集?如何在存储过程中检索动态SQL语句的执行结果?如何实现类似SELECT * FROM (EXEC procedure_name @parameters_var) AS datasource ... 的功能?procedure_

SET STATISTICS IO和SET STATISTICS TIME 在SQL Server查询性能优化中的作用

原文:SET STATISTICS IO和SET STATISTICS TIME 在SQL Server查询性能优化中的作用 近段时间以来,一直在探究SQL Server查询性能的问题,当然也漫无目的的查找了很多资料,也从网上的大神们的文章中学到了很多,在这里,向各位大神致敬.正是受大神们无私奉献精神的影响,所以小弟也作为回报,分享一下关于SET STATISTICS IO和SET STATISTICS TIME这两条T_SQL命令,在查询优化性能中的作用. 首先我想说明一下这篇文章不是关于如何

Sql Server查询性能优化之走出索引的误区

据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是,或者干脆把整个查询SQL直接发给DBA,让DBA直接帮忙优化了,所以造成的状况就是开发人员对于索引的理解.认识很局限,以下就把我个人对于索引的理解及浅薄认识和大家分享下,希望能解除一些大家的疑惑,一起走出索引的误区 误区1.在表上建立了索引,在查询时用到了索引的列,索引就一定会生效 首先明确下这样的

SQL SERVER 2005/2008 中关于架构的理解(一)

引用:http://www.cnblogs.com/chillsrc/p/3383098.html 在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询,提示“对象名'CustomEntry' 无效.”.当带上了架构名称之后(如“cus.CustomEntry”),却又能查询到表中的数据了,但是查询语句是已经写死在了应用程序中的,如果要进行更改,就有很大的工作量, 这是一件很郁闷的事情.于是想从数据库层面上解决此问题

SQL Server 记录(更新中...)

sys.databases 显示所有数据库信息 sys.tables 显示当前数据库所有的表的信息 Go 向 SQL Server 实用工具发出一批 Transact-SQL 语句已结束的信号,Go本身不是T-SQL语句 sq_addrole 等等 SQL Server 系统存储过程以字符 sp_ 开头. EXEC或EXECUTE 执行 Transact-SQL 批处理中的命令字符串.字符串或执行下列模块之一:系统存储过程.用户定义存储过程.CLR 存储过程.标量值用户定义函数或扩展存储过程.

SQL SERVER 2005/2008 中关于架构的理解(转载)

在一次的实际工作中碰到以下情况, 在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询,提示“对象名'CustomEntry' 无 效.”.当带上了架构名称之后(如“cus.CustomEntry”),却又能查询到表中的数据了,但是查询语句是已经写死在了应用程序中的,如果要进 行更改,就有很大的工作量, 这是一件很郁闷的事情.于是想从数据库层面上解决此问题,在查询了大量的资料之后,对于SQL SERVER中的架构有所了 解,并解决以上问题. 下面来