DateDiffのようなSQL日付形式関数SQL関数とDateAddSQL関数はDBAによってよく使用されますが、私たちの多くは、これらの非常に便利な機能を完全に理解するために時間をかけたことはありません。 SQL Serverを使い始めたばかりの専門家にとって、これらの関数は最初に慣れ親しんだもののいくつかです。したがって、この記事がスキルスペクトル全体のすべての人に少し役立つことを願っています
リレーショナルデータベースの世界でサポートされている最も興味深いデータ型の1つはDateTimeです。この記事では、SQLServerでの日時データ型の操作について見ていきます。日時データ型の基本を理解し、SQL Server内の組み込み関数を使用してデータを操作し、日時値を変換する方法のさまざまな例を示します。場合によっては、算術演算を実行します。
まず、一般的なSQLの日付形式と時刻関数をいくつか見てみましょう。
デフォルトでは、SQLServerは本質的に言語をサポートしています。 Windowsオペレーティングシステムでサポートされています。 SQL Serverのインストール時のロケールと照合順序の設定によっては、SQLの日付形式の表示が異なる場合があります。再生するデータの種類は、ロケール設定とSQLServer照合設定に基づいて決定されます。
SQL Serverでは、データ型DATEには2つのデフォルトの中立言語形式があります
-
YYYYMMDD
次の例、HumanResource .Employeeテーブルにクエリを実行して、HireDate値のSQL日付形式を確認します
123456USE AdventureWorks2014;GOSELECT HireDate、BusinessEntityID、LoginID、JobTitleFROM HumanResources.Employee;GOここで、クエリを実行しますニュートラル言語形式を使用するHireDate列。クエリでは、2008年で構成される整数値を渡します。月、12、7日目。
123SELECT HireDate、BusinessEntityID、LoginID、JobTitleFROM HumanResources.EmployeeWHERE HireDate = “20081207”;注:基本的に、入力値が数値であることを意味します。 SQLエンジンはそれを内部的に変換し、実際には文字値になります。したがって、一重引用符で囲まれています
-
MM-DD-YYYY(米国ベースの形式)
このSQL日付形式では、 HireDate列には、値 MM-DD-YYYYが入力されます。これは整数形式ではありません。 HireDate列に入力値「12-07-2008」の新しいSQL日付形式を使用して同じクエリを実行してみましょう。それでは、次のクエリを実行して、出力を確認しましょう。出力は、5つのレコードの同じセットです。
1234SELECT HireDate、BusinessEntityID、LoginID、JobTitleFROM HumanResources.EmployeeWHERE HireDate = “12-07-2008”;GO注:ニュートラル言語形式の値は暗黙的であり、SQLServerが必要な変換を行います。その他のSQL日付形式では、オペランドまたは/および値を適切に変換する必要があります。
次の例は、SQL日付形式の不適切な使用によるエラーメッセージを表示します。
1
2
3
|
SELECT HireDate、BusinessEntityID、LoginID、JobTitle
FROM HumanResources.Employee
WHERE HireDate = “25-12-2008 “;
|
これで、オペランドとその値の両方が標準形式103に変換されます。CAST関数とConvert関数の詳細については、ここを参照してください。次の例では、HireDate 25 -12-2008
である従業員のすべての行を返します。 SQL Serverが提供する日付関数のいくつかを見てみましょう。これらの日付関数を使用すると、日付のさまざまな部分を操作したり、日付に関して操作できる機能のいくつかを操作したりすることができます。
DATEPARTSQL関数を見てみましょう。この関数は、指定された日付列から整数値を返します
HireDate列をクエリして、日付の年部分のみを返します
次の例では、という名前の整数出力列を生成します。年の値のみを返す必要があります
1
2
3
|
SELECT DATEPART(YEAR、HireDate)AS
FROM HumanResources.Employee;
GO
|
HireDateをクエリします日付の月の部分のみを返す列
次の例では、という名前の整数出力列を生成します。これにより、月の値のみが返されます
1
2
|
SELECT DATEPART(MONTH、HireDate)AS
FROM HumanResources.Employee;
|
HireDate列をクエリして、の四半期部分のみを返します。日付
次の例では、という名前の整数出力列が生成され、月の値のみが返されます
1
2
3
|
SELECT DATEPART(QUARTER、HireDate)AS
FROM HumanResources.Employee;
GO
|
次の例orderDateフィールドの特定の日の販売の詳細を返します。この例では、DATEPARTSQL関数の使用法とそれに関連するいくつかの引数も示しています。
SELECTステートメントは関数名であるDATEPARTを選択し、括弧内に2つの引数を取ります。 1つ目は、datepart引数で、2つ目は日付式です。
DATENAMESQL関数の使用方法を見てみましょう。これはDATEPARTSQL関数に似ていますが、指定された日付フィールドから文字列を返します。
次に、日付と時刻の部分を整数値として返す決定論的関数を見てみましょう。次の例では、対応するYEAR関数とMONTH関数のOrderDateフィールドから整数値を返します。
出力は、月間売上高に基づくTotalSalesの集計値です。
では、他のいくつかの異なる機能を見てください。そして、これから見ていくのはDATEDIFFと呼ばれます。 DATEDIFF SQL関数は、2つの日付間の経過時間を決定できる符号付き整数値を返します。
クエリを試して、さまざまな日付部分を使用して結果を確認しましょう。
次の例では、2つのDateTimeフィールド間の時間部分を返します。この例では、DateTime値間の時間、分、秒はDATEDIFFSQL関数を使用して計算されます
方法where句でDATEDIFFSQL関数を使用するには
次の例では、組織で10年以上働いているすべての従業員を返します。 HireDate列の条件付きロジックは120か月以上と比較され、where句に記載されています。
1
2
3
4
|
SELECT *
FROM HumanResources.Employee
WHERE DATEDIFF(MONTH、HireDate、GETDATE())> 120;
GO
|
集計関数でDateDiffSQL関数を使用する方法
次の例では、最初の採用日からの年数を返します。そして最後の雇用日。この場合、DATEDIFFSQL関数の入力パラメーターとして使用される最小のHireDateと最大のHireDate集計関数を探しています。これらの値を使用すると、最初の採用から最後の採用までの間に存在した年数を簡単に見つけることができます。
1
2
|
SELECT DATEDIFF(YEAR、MIN(HireDate)、MAX(HireDate))No_Of_Years
FROM HumanResources.Employee;
|
DATEADDSQL関数を見てみましょう。関数は、指定された日付部分に値を加算または減算し、日付部分の変更された値を返します。
次の例を見てみましょう。値1がさまざまな日付部分に追加され、値-1が時間日付部分に追加され、値-30が分日付部分に追加されます。
出力では、値がで操作されていることがわかります。 GETDATE()関数は定義された日付部分に従います。
注:DATEADDおよびDATEDIFFSQL関数はSELECTで使用できます。 WHERE、HAVING、GROUP BY、およびORDERBY句。
DatadiffとDatediff_BIG
このSQL日付形式の記事はこれですべてです…
まとめ
これまで、DATEPART、DATENAME、YEAR、MONTH、DAYなどの非常に重要なSQL日付形式関数、特にDATEADDSQL関数とDATEDIFFSQL関数に重点を置いてきました。 SQL ServerのSQL日付形式関数は非常に強力であり、影響力のあるデータ分析とレポートを提供するのに役立ちます。場合によっては、照合設定、場所設定の調整、テキスト値の入力ストリームの再調整、またはデータソースの修正で日時の問題が十分になることがあります。
ほとんどの場合、中立的な言語形式を使用することをお勧めします。最後に、DATEDIFFSQL関数とDATEDIFF_BIGSQL関数の違いを確認します。この記事が気に入っていただければ幸いです。ご不明な点がございましたら、以下にコメントをお寄せください
- 作成者
- 最近の投稿
私の専門は、高可用性ソリューションとクロスプラットフォームDB移行を実装する&の設計にあります。現在取り組んでいるテクノロジは、SQL Server、PowerShell、Oracle、MongoDBです。
PrashanthJayaramによる投稿をすべて表示
- SQLでのデータベース監査の概要-2021年1月28日
- AzureSQLデータベースとオンプレミスSQLServer間でAzureDataSyncをセットアップする方法-2021年1月20日
- PowerShellを使用してAzureSQLデータベースのインポート/エクスポート操作を実行する方法-1月14日、2021