【原創】SQL 返回時間所在月份周次,該周起始結束日期
IF EXISTS ( SELECT 1 FROM sysobjects WHERE name = 'fn_Week) DROP FUNCTION fn_Week GO set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO /****************************************************************************** * System Name : * fn Name : fn_Week * Summary : 獲取當前時間所在月份的周次 * Parameter : * [Input] * @pi_time datetime * * Remark : Nothing * * History : 2013/12/09 * *****************************************************************************/ CREATE function [dbo].[fn_Week]( @pi_time datetime, --傳入時間 @time_type nvarchar(3) --時間型別,w-返回週數,s-返回該周開始時間,e-返回該周結束時間 ) returns nvarchar(4000) as begin --1.0變數定義和初始化 declare @r nvarchar(20)--周次 declare @first_day datetime--該月第一天 declare @weekday int --星期幾 declare @dayof_firstweek int--得到該月第一週有幾天 declare @dayof_time int declare @remainder int--餘數 set @r = '' set @weekday = 0 set @dayof_firstweek = 0 set @dayof_time = 0 set @remainder = 0 --2.0如果傳入時間的日期是所在月第一天,則肯定是第一週 if (day(@pi_time) = 1) begin --2.1周次 if(@time_type = 'w') set @r='1' --2.2開始時間 if(@time_type = 's') set @r=cast((cast(year(@pi_time) as nvarchar(4))+'-'+cast(month(@pi_time) as nvarchar(2))+'-01') as datetime) --2.3結束時間 if(@time_type = 'e') set @r=cast((cast(year(@pi_time) as nvarchar(4))+'-'+cast(month(@pi_time) as nvarchar(2))+'-07') as datetime) end --3.0如果傳入時間的日期不是所在月第一天 if (day(@pi_time) != 1) begin set @first_day=cast((cast(year(@pi_time) as nvarchar(4))+'-'+cast(month(@pi_time) as nvarchar(2))+'-01') as datetime) select @weekday =case when datename(weekday,@first_day)='Sunday'then 0--週日 when datename(weekday,@first_day)='Monday'then 1--周1 when datename(weekday,@first_day)='Tuesday'then 2--周2 when datename(weekday,@first_day)='Wednesday'then 3--周3 when datename(weekday,@first_day)='Thursday'then 4--周4 when datename(weekday,@first_day)='Friday'then 5--周5 when datename(weekday,@first_day)='Saturday'then 6--周6 end set @dayof_firstweek = 7 - @weekday--該月第一週有幾天 --3.1如果傳入時間在第一週範圍內,周次返回1 if(day(@pi_time) <= @dayof_firstweek) begin --3.1.1周次 if(@time_type = 'w') begin set @r='1' end --3.1.2開始時間 if(@time_type = 's') begin set @r=cast(year(@pi_time) as nvarchar(4))+'-'+cast(month(@pi_time) as nvarchar(2))+'-01' --set @r=convert(varchar(100),@r,23) end --3.1.3結束時間 if(@time_type = 'e') begin set @r=cast(year(@pi_time) as nvarchar(4))+'-'+cast(month(@pi_time) as nvarchar(2))+'-'+cast(@dayof_firstweek as nvarchar(2)) --set @r=convert(nvarchar(100),@r,23) end end --3.2如果傳入時間不在第一週內 if(day(@pi_time) > @dayof_firstweek) begin set @dayof_time=day(@pi_time) + 7 - @dayof_firstweek set @
[email protected]_time%7 declare @week int--宣告臨時周次變數 set @week = 0 --3.2.1餘數大於0 if(@remainder > 0) begin set @week = 1 set @week = @dayof_time/7 + @week --周次 end --3.2.2餘數等於0 if(@remainder = 0) begin set @week = 0 set @week = @dayof_time/7 + @week --周次 end set @r= cast((@dayof_time/7 + cast(@r as int)) as nvarchar(20)) declare @start int--宣告該周起始時間天 set @start = 0 set @[email protected]_firstweek + 1 + 7*(@week - 2) --開始時間日期(天) declare @end int--宣告該周結束時間天 set @end = 0 set @[email protected]_firstweek + 7*(@week - 1) --結束時間日期(天) --3.2.3周次 if(@time_type = 'w') set @r=cast(@week as nvarchar(20)) --3.2.4開始時間 if(@time_type = 's') begin set @r=cast(year(@pi_time) as nvarchar(4))+'-'+cast(month(@pi_time) as nvarchar(2))+'-'+cast(@start as nvarchar(2)) --set @r=convert(nvarchar(100),@r,23) end --3.2.5結束時間 if(@time_type = 'e') begin set @r=cast(year(@pi_time) as nvarchar(4))+'-'+cast(month(@pi_time) as nvarchar(2))+'-'+cast(@end as nvarchar(2)) --set @r=convert(nvarchar(100),@r,23) end end end return @r end
----呼叫(2013-12-09)
select dbo.fn_Week(getdate(),'w')
--2
select dbo.fn_Week(getdate(),'s')
--2013-12-8
select dbo.fn_Week(getdate(),'e')
--2013-12-14
相關推薦
【原創】SQL 返回時間所在月份周次,該周起始結束日期
IF EXISTS ( SELECT 1 FROM sysobjects WHERE name = 'fn_Week) DROP FUNCTION fn_Week GO set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO /*
【原創】VBA學習筆記(2)--例項,VBA刪除表中的空行
Sub 巨集1迴圈內刪列() '資料不規範,有的空行是4,有的是6,有的是1就不好處理了 For i = 15 To 100 Step 2 Rows(i).Delete Shift:=xlUp &nb
【原創】新韭菜日記3---套牢的困局,為什麼不願意止損割肉
為什麼不願意虧損了退出? -----一般聽起來,好像止損很高明,好像割肉就很傻? 前提情景:手上已經持股,並且已經浮虧了 行為模式:一直等待回升後,想著,我回本就賣! 實際上往往在下跌比較長一段時間/或幾次較大下跌後,出局
【原創】php將form表單多次請求的內容儲存到txt並顯示到form所在的頁面
小菜鳥分享小小經驗: 做之前百度理解相關函式(這個很重要),然後整合了一下自己的版本。 我做的是一個 同學聚會報名 頁面。 原始碼: <?php if(
【原創】用python將時間unix格式轉換總結
接受 bsp 時間戳 pretty 需要 字符串解析 time函數 spa datetime 我們可以用python裏面的time模塊mktime方法將轉為unix時間戳,mktime函數只能接受相應時間的元祖序列。在此之前需要先將輸入的時間轉為元組序列: 如果輸入的時間為
【原創】EXCEL公式經驗(7)---EXCLE一般都是返回單個值得,如何寫公式返回多個匹配值?
(1)一般excel都只能在一個單元格,且是輸入公式的這個單元格,返回一個值 (2)少數情況,可以在這個一單元格返回多個值 (3)現在考慮的是,輸入公式後,可以返回多個值 看起來公式還是遵循了(1)原則 INDEX($A:$A
【原創】Postman 如何處理上一個介面返回值作為下一個介面入參?
今天做介面測試,有一個介面的引數是一個校驗 token,會實時更新,開發提供了一個單獨返回實時 token 的介面,所以就需要在功能介面使用時呼叫 token 介面的返回值,作為功能介面的引數來使用。 網上搜了一下,都沒有現成的使用說明,剛才研究出來了,就記錄
【原創】建立與保持時間裕量詳細分析
筆者這段時間在找工作中發現,關於時序分析的基礎概念,時序關係表示式及時序違例計算幾乎是每個IC/FPGA崗位筆試面試的必考內容。就此,從建立保持時間裕量出發,夯實基礎。本文主要是對之前轉載部落格【時序約束學習筆記1】Vivado入門與提高--第12講 時序分析中的基本概念和術語 做一些總結和個人理解。
【原創】經驗分享(12)如何程式化kill提交到spark thrift上的sql
spark 2.1.1 hive正在執行中的sql可以很容易的中止,因為可以從console輸出中拿到當前在yarn上的application id,然後就可以kill任務, WARNING: Hive-on-MR is deprecated in Hive 2 and may no
【原創】經驗分享(15)spark sql limit實現原理
之前討論過hive中limit的實現,詳見 https://www.cnblogs.com/barneywill/p/10109217.html下面看spark sql中limit的實現,首先看執行計劃: spark-sql> explain select * from test1 limit
【原創】大資料基礎之Hive(1)Hive SQL執行過程
hive 2.1 hive執行sql有兩種方式: 執行hive命令,又細分為hive -e,hive -f,hive互動式; 執行beeline命令,beeline會連線遠端thrift server; 下面分別看這些場景下sql是怎樣被執行的: 1 hive命令 啟動
【MyBatis】sql語句中的按時間排序無效問題order by create_time desc
mybatis的mapper檔案中書寫sql語句,但是根據時間倒序查詢的order by create_time 突然無效了,這是為什麼?導致無效的原因:時間格式做了改變,時間欄位別名和原始欄位重名,導
【原創】安裝ODAC後,PL/SQL連線提…
問題描述: 安裝ODAC後,用PL/SQL登入測試原有的資料庫,先是提示:access violation ataddress....,重啟監聽後又 提示“TNS:無法解析指定的連線識別符號”錯誤。 原因分析: 因為同事也裝過一次,說是不能與oracle客戶端裝在同一個目錄下。但
【原創】面試時遇到『看門狗』脖子上掛著『時間輪』,我就問你怕不怕?
Redisson的看門狗和Netty的時間輪,瞭解一下?寫的過程中順便打了一下自己的臉。技術嘛,不就是在不斷打臉的過程中成長起來的嘛。 荒腔走板聊生活 大家好,一週的時間過的飛快,轉眼間又到週末了。 老規矩,還是本號特色,先是荒腔走板的聊聊生活。 上面的圖片是我在一次跑步的過程中拍的,一隻狗子。可以看到圖
【原創】解BUG-xenomai核心與linux核心時間子系統之間存在漂移
版權宣告:本文為本文為博主原創文章,轉載請註明出處。如有問題,歡迎指正。部落格地址:https://www.cnblogs.com/wsg1100/ ## 一、問題起源 >何為漂移?舉個例子兩顆32.768kHz晶振$C_1$和$C_2$,由於製造工藝原因或者使用時溫度、輔助元件引數等影響,與他們的實際
【原】Sql Server 2008---安裝時卸載Visual Studio
studio ima ext 一段 image 控制面板 選擇 應用 技術 由於數據庫連接不上,所以卸載數據庫,然後安裝的時候出問題報錯,結果是因為vs, 所以就有了卸載vs這一步。某些圖片借用一下。 1. 打開電腦中的控制面板--程序和功能 2.找到要卸載的軟件,但
【原創】Python 對象創建過程中元類, __new__, __call__, __init__ 的處理
diff regular luci 自定義 weight ica 一般來說 att ray 原始type: type是最原始的元類,其__call__方法是在你使用" t_class = type(classname_string, base_classes_tuple,
【原創】Beyond Compare 萬能破解方法
use cnblogs users sse bash 主程 官網 support compare 一、Mac 平臺上的破解 在官網(http://www.scootersoftware.com/download.php)下載最新的 Beyond Compare 解壓後,
【原創】datagridview動態綁定contextmenustrip,並復制單元格數據
event args oar cells ren .get add cell ntc public class DGVCopy { public DataGridView DataGridViewCopy { get; set; }
【原創】一個支持極限大小的數組MaxArray,且節省內存
類型 fin blog exc list 缺少 內存 stop con 大家好,我寫了一個支持極限大小的數組MaxArray,很有用的,希望大家喜歡~~ 問:.net類庫不是自帶了一個嗎,幹嘛還要自己寫一個?好在哪裏? 答:數組可以在創建後立即訪問範圍內的任意索