データベースやその他のプログラミング環境で作業しているときに、日付値を取得しても、形式/データ型が間違っている場合があります。たとえば、組み込みの日付関数を使用して日付が生成された場合、最後のナノ秒までの日付と時刻の両方が含まれる場合があります。そして、必要なのは日、月、年だけです。たとえば、2018-01-01のように言います。
SQL Serverの使用中にこれが発生した場合は、 CONVERT()
を使用できます。 別のデータ型に変換する関数。これを行うと、データ型によって表示される形式が決まります。
この記事では、 CONVERT()
の使用例を紹介します。 SQL Serverの関数を使用して、日付値を別の(日付)データ型に変換します。
構文
まず、公式の構文は次のとおりです。
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
これらの引数は次のように定義されています。
式
- 有効な式。
-
data_type
- ターゲットデータ型。これには、 xmlが含まれます 、 bigint 、および sql_variant 。エイリアスデータ型は使用できません。
長さコード>
- ターゲットデータ型の長さを指定するオプションの整数。デフォルト値は
30
です 。 スタイル
-
CONVERT()
の方法を指定する整数式 関数は式を変換します 。 NULLのスタイル値の場合、NULLが返されます。 data_type 範囲を決定します。
例1-SYSDATETIME()から日付データ型に変換
この例では、 SYSDATETIME()
を使用して現在の日付/時刻を生成します。 関数を作成し、それを日付に変換します データ型。
SYSDATETIME()
に注意してください その値をdatetime2(7)として生成します データ型なので、そのデータ型から別のデータ型に変換しています。
SELECT SYSDATETIME() AS Original, CONVERT(date, SYSDATETIME()) AS Converted;
結果:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-06 22:53:47.2318751 | 2018-06-06 | +-----------------------------+-------------+
例2– SYSDATETIME()からsmalldatetimeデータ型に変換する
この例では、日付を smalldatetimeに変換します データ型。
SELECT SYSDATETIME() AS Original, CONVERT(smalldatetime, SYSDATETIME()) AS Converted;
結果:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 | +-----------------------------+---------------------+
例3– SYSDATETIME()からdatetimeoffsetデータ型への変換
この例では、日付を datetimeoffsetに変換します データ型。
SELECT SYSDATETIME() AS Original, CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;
結果:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 | +-----------------------------+------------------------------------+
例4– SYSDATETIME()からtimeデータ型に変換
値の日付コンポーネントを表示することに限定されません。 時間に変換することもできます データ型。時間コンポーネントのみが返されます。このように:
SELECT SYSDATETIME() AS Original, CONVERT(time, SYSDATETIME()) AS Converted;
結果:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 | +-----------------------------+------------------+
例5– SYSDATETIMEOFFSET()から変換
前の例はすべて同じ組み込み関数を使用して日付/時刻の値を生成しますが、もちろん、この1つの関数で生成する必要はありません。 SYSDATETIMEOFFSET()
を使用した例を次に示します。 :
SELECT SYSDATETIMEOFFSET() AS Original, CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;
結果:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
例6–データベースクエリから変換
WideWorldImportersサンプルデータベースの列から取得した日付を変換する例を次に示します。
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) AS 'Converted' FROM Sales.CustomerTransactions;
結果:
+-----------------------------+-------------+ | LastEditedWhen | Converted | |-----------------------------+-------------| | 2013-01-02 11:30:00.0000000 | 2013-01-02 | | 2013-01-03 11:30:00.0000000 | 2013-01-03 | | 2013-01-04 11:30:00.0000000 | 2013-01-04 | | 2013-01-05 11:30:00.0000000 | 2013-01-05 | | 2013-01-06 11:30:00.0000000 | 2013-01-06 | | 2013-01-08 11:30:00.0000000 | 2013-01-08 | | 2013-01-09 11:30:00.0000000 | 2013-01-09 | | 2013-01-10 11:30:00.0000000 | 2013-01-10 | | 2013-01-11 11:30:00.0000000 | 2013-01-11 | | 2013-01-12 11:30:00.0000000 | 2013-01-12 | +-----------------------------+-------------+
2つの異なる日付形式の間で変換するだけに限定されないことに注意してください。たとえば、日付を文字列として保存している場合は、 CONVERT()
を使用することもできます。 文字列から日付、および変換する必要のあるその他のデータ型に変換します。
CAST()
を使用して日付形式を変換する方法を示す投稿も作成しました 上記と同じ例を使用して関数を作成します。