我工作遇到這么一個情況:
算當前周的課程,有兩種方法一種是用sql自帶的函數datediff(select * from Table8 where datediff(wk,COLUMN8,getdate())=0)
另一種是在c#后臺代碼中直接寫然后傳參。我想問一下這兩種方法哪一種更好,速度更快。
分析:
看你想把壓力給誰
數據量不大的話,還是sql會好一些
?
感悟:
以前都是在后臺去算,今天想了想,又查了查。發現在sql里就可以實現。看來我的sql基礎實在是太薄弱了。這讓我再一次意識到自己還有許多需要學習的。
?
下面程序前輩寫的sql取當周時間的詳細做法:
如何用sql獲取當前周的7個時間 ???


















查詢當前周:
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?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
