sql取當前周的函數


我工作遇到這么一個情況:
算當前周的課程,有兩種方法一種是用sql自帶的函數datediff(select * from Table8 where datediff(wk,COLUMN8,getdate())=0)
另一種是在c#后台代碼中直接寫然后傳參。我想問一下這兩種方法哪一種更好,速度更快。


分析:
看你想把壓力給誰
數據量不大的話,還是sql會好一些

 

感悟:

以前都是在后台去算,今天想了想,又查了查。發現在sql里就可以實現。看來我的sql基礎實在是太薄弱了。這讓我再一次意識到自己還有許多需要學習的。

 

下面程序前輩寫的sql取當周時間的詳細做法:

如何用sql獲取當前周的7個時間   

 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客--按日 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客select sum(consume),day([date]) from consume_record where year([date]) = '2006' group by day([date]) 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客--按周quarter 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客select sum(consume),datename(week,[date]) from consume_record where year([date]) = '2006' group by datename(week,[date]) 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客--按月 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客select sum(consume),month([date]) from consume_record where year([date]) = '2006' group by month([date]) 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客--按季 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客select sum(consume),datename(quarter,[date]) from consume_record where year([date]) = '2006' group by datename(quarter,[date]) 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客--指定日期你就看上面的例子變通下呀,無非就是一個聚合函數和Group by 
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客
如何用sql獲取當前周的7個時間 - 轉角空 - zhuanjiaokong的博客select [date],sum(consume) from consume_record where [date] between '2006-06-01' and '2006-07-10' group by [date]  

查詢當前周:
select * from table
where datediff(wk,startdate,getdate())=0

查詢下一周(也就是當前周的下一周):
select * from table
where datediff(wk,startdate,getdate())=-1

查詢上一周(也就是當前周的上一周):
select * from table
where datediff(wk,startdate,getdate())=1
///////////////////////////////////////////

declare @today datetime
select @today = convert(varchar(10), getdate(), 20)
declare @weekday int 
select @weekday = datepart(weekday, @today)
declare @st datetime, @et datetime 
select @st = dateadd(dd, 1-@weekday, @today), @et = dateadd(dd, 7-@weekday, @today)
select * from table
where startdate between @st and @et
當然,這里的開始時間、結束時間跟你sql server的設置有關,即你的周是從周一開始還是從周日開始。

DECLARE @dt datetime
SET @dt=GETDATE()
DECLARE @number int
SET @number=3
--1.指定日期該年的第一天或最后一天
--A. 年的第一天
SELECT CONVERT(char(5),@dt,120)+'1-1'
--B. 年的最后一天
SELECT CONVERT(char(5),@dt,120)+'12-31'

--2.指定日期所在季度的第一天或最后一天
--A. 季度的第一天
SELECT CONVERT(datetime,
    CONVERT(char(8),
        DATEADD(Month,
            DATEPART(Quarter,@dt)*3-Month(@dt)-2,
            @dt),
        120)+'1')
--B. 季度的最后一天(CASE判斷法)
SELECT CONVERT(datetime,
    CONVERT(char(8),
        DATEADD(Month,
            DATEPART(Quarter,@dt)*3-Month(@dt),
            @dt),
        120)
    +CASE WHEN DATEPART(Quarter,@dt) in(1,4)
        THEN '31'ELSE '30' END)
--C. 季度的最后一天(直接推算法)
SELECT DATEADD(Day,-1,
    CONVERT(char(8),
        DATEADD(Month,
            1+DATEPART(Quarter,@dt)*3-Month(@dt),
            @dt),
        120)+'1')

--3.指定日期所在月份的第一天或最后一天
--A. 月的第一天
SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')
--B. 月的最后一天
SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')
--C. 月的最后一天(容易使用的錯誤方法)
SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))

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

--5.指定日期所在周的任意星期幾
--A.  星期天做為一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
--B.  星期一做為一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
  
具體例子: 
SELECT CONVERT(varchar(100), GETDATE(), 0)union--: 05 16 2006 10:57AM 
SELECT CONVERT(varchar(100), GETDATE(), 1)union--: 05/16/06 
SELECT CONVERT(varchar(100), GETDATE(), 2)union--: 06.05.16 
SELECT CONVERT(varchar(100), GETDATE(), 3)union--: 16/05/06 
SELECT CONVERT(varchar(100), GETDATE(), 4)union--: 16.05.06 
SELECT CONVERT(varchar(100), GETDATE(), 5)union--: 16-05-06 
SELECT CONVERT(varchar(100), GETDATE(), 6)union--: 16 05 06 
SELECT CONVERT(varchar(100), GETDATE(), 7)union--: 05 16, 06 
SELECT CONVERT(varchar(100), GETDATE(), 8)union--: 10:57:46 
SELECT CONVERT(varchar(100), GETDATE(), 9)union--: 05 16 2006 10:57:46:827AM 
SELECT CONVERT(varchar(100), GETDATE(), 10)union--: 05-16-06 
SELECT CONVERT(varchar(100), GETDATE(), 11)union--: 06/05/16 
SELECT CONVERT(varchar(100), GETDATE(), 12)union--: 060516 
SELECT CONVERT(varchar(100), GETDATE(), 13)union--: 16 05 2006 10:57:46:937 
SELECT CONVERT(varchar(100), GETDATE(), 14)union--: 10:57:46:967 
SELECT CONVERT(varchar(100), GETDATE(), 20)union--: 2006-05-16 10:57:47 
SELECT CONVERT(varchar(100), GETDATE(), 21)union--: 2006-05-16 10:57:47.157 
SELECT CONVERT(varchar(100), GETDATE(), 22)union--: 05/16/06 10:57:47 AM 
SELECT CONVERT(varchar(100), GETDATE(), 23)union--: 2006-05-16 
SELECT CONVERT(varchar(100), GETDATE(), 24)union---: 10:57:47 
SELECT CONVERT(varchar(100), GETDATE(), 25)union--: 2006-05-16 10:57:47.250 
SELECT CONVERT(varchar(100), GETDATE(), 101)union--: 05/16/2006 
SELECT CONVERT(varchar(100), GETDATE(), 102)union--: 2006.05.16 
SELECT CONVERT(varchar(100), GETDATE(), 103)union--: 16/05/2006 
SELECT CONVERT(varchar(100), GETDATE(), 104)union---: 16.05.2006 
SELECT CONVERT(varchar(100), GETDATE(), 105)union--: 16-05-2006 
SELECT CONVERT(varchar(100), GETDATE(), 106)union--: 16 05 2006 
SELECT CONVERT(varchar(100), GETDATE(), 107)union---: 05 16, 2006 
SELECT CONVERT(varchar(100), GETDATE(), 108)union--: 10:57:49 
SELECT CONVERT(varchar(100), GETDATE(), 109)union--: 05 16 2006 10:57:49:437AM 
SELECT CONVERT(varchar(100), GETDATE(), 110)union--: 05-16-2006 
SELECT CONVERT(varchar(100), GETDATE(), 111)union--: 2006/05/16 
SELECT CONVERT(varchar(100), GETDATE(), 112)union--: 20060516 
SELECT CONVERT(varchar(100), GETDATE(), 113)union--: 16 05 2006 10:57:49:513 
SELECT CONVERT(varchar(100), GETDATE(), 114)union--: 10:57:49:547 
SELECT CONVERT(varchar(100), GETDATE(), 120)union--: 2006-05-16 10:57:49 
SELECT CONVERT(varchar(100), GETDATE(), 121)union--: 2006-05-16 10:57:49.700 
SELECT CONVERT(varchar(100), GETDATE(), 126)union--: 2006-05-16T10:57:49.827 
SELECT CONVERT(varchar(100), GETDATE(), 130)union--: 18 ???? ?????? 1427 10:57:49:907AM 
SELECT CONVERT(varchar(100), GETDATE(), 131)--: 18/04/1427 10:57:49:920AM 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM