SQLスキルのデータベースは、ケースを整理する
I. 指定した月の日数を取得する
指定された日付をもとに、その月の日数を計算します。
システム変数@@DATEFIRSTの値をもとに、[DatePart(WEEKDAY,RQ) = (07-@DateFirst) % 7 + 1]として日曜日の序数を決定する。以下は、日曜日、月曜日...土曜日の計算式である。
以下は、日曜日を取得するためのSQL文です。SQL文は、データを取得するためにネストされたループを使用しています。
DECLARE @Day SmallDateTime
SET @Day = DateAdd(MM, DateDiff(MM,0,'2019-11-21'), 0)
;WITH Temp AS
( SELECT @Day AS RQ UNION ALL
SELECT RQ+1
FROM TEMP WHERE DateDiff(Month,RQ+1,@Day) = 0
)
SELECT
RN = Row_Number() Over(ORDER BY RQ),
RQ
FROM Temp WHERE DatePart(WEEKDAY,RQ)= (07-@@@DateFirst) % 7 + 1
<スパン どこで
[DateAdd(MM, DateDiff(MM,0,'2019-08-21'), 0)] は、月の初日を取得するための通常の方法です。
実行結果は次のようになります。
+--+---------------------+
|--+---------------------|
| 1 | 2019-08-04 00:00:00 |
| 2 | 2019-08-11 00:00:00 |
| 3 | 2019-08-18 00:00:00 |
| 4 | 2019-08-25 00:00:00 |
+---+---------------------+
<スパン II. 指定した月の全日程の日付を取得する
どこで
[DateDiff(Month,fDay+1,@RQ) = 0]が月の等価性を判断する常套手段です
DECLARE @RQ SMALLDATETIME
SET @RQ = '2019-09-01';
;WITH
tAppDays (fDay) AS
(
SELECT @RQ AS fDay
UNION ALL
SELECT fDay + 1 FROM tAppDays WHERE DateDiff(Month,fDay+1,@RQ) = 0
)
SELECT * FROM tAppDays ORDER BY fDAY
以下は実行結果です。
fDay
---------------------
2019-09-01 00:00:00
2019-09-02 00:00:00
2019-09-03 00:00:00
...
2019-09-23 00:00:00
2019-09-24 00:00:00
2019-09-25 00:00:00
2019-09-26 00:00:00
2019-09-27 00:00:00
2019-09-28 00:00:00
2019-09-29 00:00:00
2019-09-30 00:00:00
<スパン III. 部分文字列の一覧の取得
再帰を使って、与えられた文字列のSPLITメソッドを取得する
-- SPLIT method that uses recursion to get a given string
DECLARE @CommentStr NVARCHAR(4000)='General Manager's Office|Sales Department|Accounting Department|Human Resources Department|Trade Union|Logistics Department|Production Planning Department|Power Branch|Quality Inspection Department|Transportation Department'
DECLARE @Split NVARCHAR(1)='|';
WITH Temp AS
( SELECT 1 AS Num UNION ALL
SELECT Num + 1
FROM TEMP WHERE Num<Len(@CommentStr) )
SELECT
RN = Row_Number() Over(ORDER BY Num),
SplitStr = SUBSTRING(@CommentStr,Num,CHARINDEX(@Split,@CommentStr+@Split,Num)-Num)
FROM Temp WHERE SUBSTRING(@Split+@CommentStr,Num,1) = @Split OPTION(MAXRECURSION 0);
その仕組みは次のとおりです。
<ブロッククオートRN SplitStr
------------------------
1 ゼネラルマネージャーオフィス
2 営業部
3 経理部
4 人事部
5 労働組合
6 物流部
7 生産企画部
8 電力サブプラント
9 品質検査部
10 運送部門
------------------------
区切り文字付きの文字列が与えられたら、このステートメントで個々のフィールドのリストを取得します。
-- ================================================================================================
-- pAppGetSplit '|','Subject name|ID number|student name|instructor number|instructor name|training times|total times|responsibility percentage'
================================================================================================
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pAppGetSplit' AND type = 'P')
DROP PROCEDURE pAppGetSplit
GO
CREATE PROCEDURE pAppGetSplit
@Split VARCHAR(1),
@STR NVARCHAR(4000)
AS
WITH Temp AS -- Get a list of fields by separator
( SELECT 1 AS Num UNION ALL
SELECT Num + 1
FROM TEMP WHERE Num<Len(@STR) )
SELECT
RN = Row_Number() Over(ORDER BY Num),
SplitStr = SUBSTRING(@STR,Num,CHARINDEX(@Split,@STR+@Split,Num)-Num)
FROM Temp WHERE SUBSTRING(@Split+@STR,Num,1) = @Split OPTION(MAXRECURSION 0);
GO
その仕組みは次のとおりです。
<ブロッククオート+---+---------------------+
|RN|SplitStr|(スプリットストリング
|----+---------------------|
| 1|セクション名
| 2|ID番号
| 3|学習者名
| 4|インストラクター番号
| 5|コーチの名前
| 6|トレーニングセッションの回数
| 7|総セッション数
| 8|責任者比率
+--+---------------------+
<スパン IV. 指定した曜日の日付を取得する
取得するために指定された曜日に基づいて日付を取得します。
--get the date of the Monday of the week
DECLARE @Z SMALLINT
-- [1,2,3,4,5,6,7] for [Mon,Tue,Wed,Thu,Fri,Sat,Sun] respectively
SET @Z=1
SELECT
GetDate() Today,
DATEPART(Weekday,GetDate()) Today's serial number,
(DATEPART(Weekday,GetDate()) + @@DATEFIRST-1)%7 What day of the week it is,
DATEADD(Day,@Z-(DATEPART(Weekday,GetDate()) + @@DATEFIRST-1)%7,GetDate()) Monday of the week
これは、データベースの仕上げの場合のSQLスキルに関するこの記事の終わりです、より関連するSQLスキルの内容は、スクリプトハウスの前の記事を検索してくださいまたは次の関連記事を閲覧し続けるあなたは、将来的にもっとスクリプトハウスをサポートすることを願っています!.
関連
-
SQLSERVER 変数文字列を用いたスプライシング ケース詳細
-
SQLServerクリーンアップログファイルのメソッド事例詳細
-
SQL Server一括挿入データ事例詳細
-
SQLの書き方--行ごとの比較
-
Filestreamの簡単な使い方まとめ
-
SQL文におけるJOINの利用シーンの分析
-
SQL Server のジョブが失敗しました。所有者がサーバーアクセス権を持っているかどうか判断できない
-
SQLServerのエラーです。15404, unable to get information about Windows NT group/user WIN-8IVSNAQS8T7Administrator
-
SQLにアイドルCPU条件が定義されていないため、OnIdleジョブプランが機能しない
-
SQLServerにおけるJSONドキュメント型データのクエリ問題を解決する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SQLにおける3つの重複排除手法の概要
-
あるユーザーの連続ログイン日数を求めるSQLクエリ
-
SQL Server2017では、IPをサーバー名としてサーバーに接続します。
-
SQL ServerのSELECT INTOとINSERT INTOのSELECTのケースを説明する
-
NavicatはSQL Serverのデータに接続します。エラー08001に対する完璧な解決策 - Named Pipeline Provider
-
SqlServerデータベースリモート接続ケースチュートリアル
-
SQLサーバーのデータベースで、SAユーザーがロックされている問題を解決する
-
SQL クエリ結果カラムのカンマ区切り文字列へのステッチング法
-
データベース毎日練習問題、毎日少しづつ進歩(1)
-
Spark SQLの全体的な実装ロジックの説明