TO_DATE (SQL)
構文
TO_DATE(dateString)
TO_DATE(dateString,format)
TODATE(...)
概要
TO_DATE 関数は、さまざまな形式の日付文字列をデータ型 DATE の日付整数値に変換します。この関数は、さまざまな文字列形式で日付を入力し、その値を標準の InterSystems IRIS® 表現で保存するために使用します。
TO_DATE は、1840 年 12 月 31 日からの日数を示す整数値を返します。0 は 1840 年 12 月 31 日を表し、最小値の -672045 は 0001 年 1 月 1 日を表し、最大値の 2980013 は 9999 年 12 月 31 日を表します。
-
TO_DATE(dateString) は、既定の形式 DD MON YYYY を使用して日付文字列を解析します。
以下の文は、日付文字列 22 Feb 2022 を整数 66162 に変換します。
SELECT TO_DATE('22 FEB 2022')
例 : 既定の日付形式
-
TO_DATE(dateString,format) は、指定された形式文字列を使用して日付文字列を解析します。dateString の日付要素は、format の形式要素に対応している必要があります。
以下の文は、前の構文と同じ変換を実行しますが、カスタム形式を使用して日付文字列を指定することができます。
SELECT TO_DATE('2-22-22','M-DD-YY')
例 :
-
TODATE(...) は、TO_DATE(...) と同等です。
引数
dateString
dateString 引数は、日付に変換される日付文字列を指定する文字列式です。dateString の基本となるデータ型は CHAR または VARCHAR2 である必要があります。
dateString の各文字は、以下の例外を除いて format 文字列に対応している必要があります。
-
区切り文字のない dateString の場合を除き、先頭のゼロは指定しても省略してもかまいません。
-
年は 2 桁または 4 桁で指定できます。
-
月名は、完全な名前または月名の最初の 3 文字で指定できます。正確に入力する必要があるのは最初の 3 文字のみです。月の名前では、大文字と小文字は区別されません。
-
日付に追加された時刻の値は無視されます。
指定可能な最も早い日付は 1840 年 12 月 31 日で、これは InterSystems IRIS では論理整数 0 として表されます。さらに早い日付を指定するには、ユリウス日付形式を使用します。"ユリウス日 (J 形式)" を参照してください。
format
format 引数は、dateString の形式を指定する日付文字列です。TO_DATE は、format の対応する位置にある形式要素に基づいて、dateString の日付要素を変換します。format の要素は以下のルールに従う必要があります。
-
形式要素では、大文字と小文字は区別されません。
-
ほとんど任意の数と順序で形式要素を使用できます。
-
形式文字列は、dateString の区切り文字に一致する、英数字でない区切り文字 (スペース、スラッシュ、ハイフンなど) で要素を区切ります。この指定された日付区切り文字の使用は、NLS (各国言語サポート) ロケールに対して定義されている DateSeparator に依存しません。
-
MMDDYYYY、DDMMYYYY、YYYYMMDD、YYYYDDMM の各日付形式文字列には、区切り文字は必要ありません。不完全な日付形式 YYYYMM も使用でき、DD 値は 01 と見なされます。これらの形式では、MM と DD の値には先頭のゼロが必要です。
以下の表は、有効な日付形式要素を示しています。大文字の形式が示されていますが、これらの要素では大文字と小文字が区別されません。
要素 | 意味 |
---|---|
DD | 2 桁の日付 (01 ~ 31)format に日付の区切り文字を記述している場合、各要素の先頭にゼロは不要です。 |
MM |
2 桁の月数 (01 ~ 12、01 = 1 月)。format に日付の区切り文字を記述している場合、各要素の先頭にゼロは不要です。 日本語と中国語では、月数は数値とそれに続く表意文字 “月” で構成されます。 |
MON | 現在のロケールの MonthAbbr プロパティによって指定される月の略名。既定で、これは英語による月名の最初の 3 文字です。その他のロケールでは、月名の略名が 4 文字以上になる場合や、月名の最初の数文字で構成されない場合があります。ピリオド文字の使用は認められていません。大文字と小文字は区別されません。 |
MONTH | 現在のロケールの MonthName プロパティによって指定される正式な月名。大文字と小文字は区別されません。 |
YYYY | 4 桁の年数 |
YY | 下 2 桁の年数。2 桁の年数の最初の 2 桁は既定で 19 になります。 |
RR / RRRR | 2 桁の年数から 4 桁の年数への変換詳細は、"2 桁の年の変換 (RR および RRRR 形式)" を参照してください。 |
DDD | 年間通算日。1 月 1 日からの日数 "年間通算日の変換 (DDD 形式)" を参照してください。 |
J | ユリウス日 1840 年 12 月 31 日より前の日付を表すために使用します。"ユリウス日 (J 形式)" を参照してください。 |
TO_DATE format には、D (曜日番号)、DY (曜日の省略形)、または DAY (曜日名) 要素を含めることもできます。ただし、これらの形式要素は、検証されることや戻り値の決定に使用されることはありません。これらの format 要素の詳細は、"TO_CHAR" を参照してください。
format を省略すると、TO_DATE は既定の形式 DD MON YYYY を使用して日付文字列を解析します。例えば、'22 Feb 2018' です。既定の日付形式をシステム全体で変更するには、TODATEDefaultFormat 構成パラメータを変更します。
現在の設定を確認するには、$SYSTEM.SQL.CurrentSettings()Opens in a new tab を呼び出します。これにより、[TO_DATE デフォルトフォーマット] の設定が表示されます。
例
既定の日付形式
以下の文は、既定の日付形式を使用して解析される日付文字列を指定します。これらの文字列の両方は、60537 の DATE データ型内部値に変換されます。
SELECT
TO_DATE('29 September 2018'),
TO_DATE('29 SEP 2018')
以下の文は、既定の format を使用した 2 桁の年で日付文字列を指定します。2 桁の年数は既定で 1900 ~ 1999 になっていることに注意してください。このため、内部 DATE 値は 24012 になります。
SELECT
TO_DATE('29 September 06'),
TO_DATE('29 SEP 06')
指定された日付形式
以下の文は、さまざまな形式で日付文字列を指定します。これらの文字列のすべては、64701 の DATE データ型内部値に変換されます。
SELECT
TO_DATE('2018 Feb 22','YYYY MON DD'),
TO_DATE('FEBRUARY 22, 2018','month dd, YYYY'),
TO_DATE('2018***02***22','YYYY***MM***DD'),
TO_DATE('02/22/2018','MM/DD/YYYY')
以下の文は、要素の区切り文字を必要としない日付形式を指定します。これは、日付の内部値 64701 を返します。
SELECT
TO_DATE('02222018','MMDDYYYY'),
TO_DATE('22022018','DDMMYYYY'),
TO_DATE('20182202','YYYYDDMM'),
TO_DATE('20180222','YYYYMMDD')
以下の文は、YYYYMM 日付形式を指定します。これは要素の区切り文字を必要としません。欠落している日付要素には 01 を設定して、64800 (2018 年 6 月 1 日) という日付を返します。
SELECT TO_DATE('201806','YYYYMM')
スタンドアロンの日付要素形式
format 引数では、スタンドアロンの日付文字列として、DD、DDD、MM、または YYYY を指定できます。これらの形式文字列は、月、年、または月と年の両方が省略されるため、InterSystems IRIS では、これらが現在の月および年を参照しているものと解釈されます。
DD は、現在年の現在月の指定日の日付を返します。以下に例を示します。
SELECT TO_DATE('24','DD')
DDD は、現在年で、指定された日数が経過した日の日付を返します。以下に例を示します。
SELECT TO_DATE('300','DDD')
MM は、現在年の指定された月の初日の日付を返します。以下に例を示します。
SELECT TO_DATE('8','MM')
YYYY は、指定された年の現在月の初日の日付を返します。以下に例を示します。
SELECT TO_DATE('2022','YYYY')
2 桁の年の変換 (RR および RRRR 形式)
YY 形式では、2 桁の年の値に 19 が付加されて 4 桁の値に変換されます。例えば、07 は 1907 になり、93 は 1993 になります。RR 形式および RRRR 形式では、2 桁の年から 4 桁の年への変換をより柔軟に行います。
RR 形式の変換は現在の年に基づきます。
-
現在の年が、ある世紀の前半にある場合、以下のようになります。
-
00 ~ 49 までの 2 桁の年は現在の世紀の 4 桁の年に展開されます。
-
50 ~ 99 までの 2 桁の年は前の世紀の 4 桁の年に展開されます。
以下の文は、現在の年が 2000 から 2050 までの間の場合に TO_DATE が返す日付の表示形式を示しています。
SELECT TO_DATE('29 September 00','DD MONTH RR'), -- 09/29/2000 TO_DATE('29 September 18','DD MONTH RR'), -- 09/29/2018 TO_DATE('29 September 49','DD MONTH RR'), -- 09/29/2049 TO_DATE('29 September 50','DD MONTH RR'), -- 09/29/1950 TO_DATE('29 September 77','DD MONTH RR') -- 09/29/1977
-
-
現在の年が、ある世紀の後半にある場合、すべての 2 桁の年が現在の世紀の 4 桁の年に展開されます。
以下の文は、現在の年が 2050 から 2099 までの間の場合に TO_DATE が返す日付の表示形式を示しています。
SELECT TO_DATE('29 September 00','DD MONTH RR'), -- 09/29/2000 TO_DATE('29 September 21','DD MONTH RR'), -- 09/29/2021 TO_DATE('29 September 49','DD MONTH RR'), -- 09/29/2049 TO_DATE('29 September 50','DD MONTH RR'), -- 09/29/2050 TO_DATE('29 September 77','DD MONTH RR') -- 09/29/2077
RRRR 形式を使用することにより、2 桁と 4 桁の年を混合して入力することができます。TO_DATE は、4 桁の年を変更せずに渡します。TO_DATE は、この例で前述の RR 形式アルゴリズムを使用して、2 桁の年を 4 桁の年に変換します。
以下の文は、現在の年が 2000 から 2050 までの間の場合に TO_DATE が返す日付の表示形式を示しています。
SELECT
TO_DATE('29 September 2021','DD MONTH RRRR'), -- 09/29/2021
TO_DATE('29 September 21','DD MONTH RRRR'), -- 09/29/2021
TO_DATE('29 September 1949','DD MONTH RRRR'), -- 09/29/1949
TO_DATE('29 September 49','DD MONTH RRRR'), -- 09/29/2049
TO_DATE('29 September 1950','DD MONTH RRRR'), -- 09/29/1950
TO_DATE('29 September 50','DD MONTH RRRR') -- 09/29/1950
年間通算日の変換 (DDD 形式)
DDD 形式を使用して、年間通算日 (1 月 1 日から経過した日数) を実際の日付に変換できます。この変換を実行するには、以下の点に留意してください。
-
format 引数には、DDD 形式要素を含める必要があります。また、オプションで YYYY、YY、RR、RRRR などの年形式を含めることができます。これらの要素は任意の順序で指定できますが、要素の間に区切り文字を追加する必要があります。年を省略した場合、TO_DATE によって現在の年が既定値として使用されます。
-
dateString 引数には、対応する day および year の値を含める必要があります。
-
day は、1 から 365 までの整数です (year がうるう年の場合は 366)。
-
year は、InterSystems IRIS の標準の日付範囲内 (1841 から 9999) の年です。
-
以下の文は、2022 年の 60 日目を返します。
SELECT TO_DATE('2022:60','YYYY:DDD') -- 03/01/2022
TO_DATE は月の要素を変更せずに渡します。形式文字列に DD と DDD 要素の両方が含まれる場合、TO_DATE は DDD 要素を処理し、DD 要素を無視します。例えば、以下の文は、2020 年 12 月 31 日ではなく、2020 年 2 月 29 日 (2020 年の 60 日目) を返します。
SELECT TO_DATE('2020-12-31-60','YYYY-MM-DD-DDD')
TO_DATE は、年間通算日そのものではなく、年間通算日を含む日付式を返します。この日付の値を返すには、TO_CHAR を使用します。
既定の日付列値の設定
CREATE TABLE コマンドを使用してテーブルを作成する際に、TO_DATE 関数を使用して列の既定値を設定できます。以下に例を示します。
CREATE TABLE MyTable
(ID NUMBER(12,0) NOT NULL,
End_Year DATE DEFAULT TO_DATE('12-31-2021','MM-DD-YYYY') NOT NULL)
詳細
ユリウス日 (J 形式)
ユリウス日付形式を使用すると、1840 年 12 月 31 日より前の日付を表すことができます。この形式を使用するには、TO_DATE の format 引数を 'J' または 'j' に指定します。この形式を使用して、7 桁の内部数値 (ユリウス日のカウント) を形式設定済みの日付に変換できます。例えば、以下の文は、論理形式または ODBC 形式では 1585–01–31 を、表示形式では 01/31/1585 をそれぞれ返します。
SELECT TO_DATE(2300000,'J')
ユリウス日のカウント値 1721424 は、ユリウス暦の 1 年 1 月 1 日 (1–01–01) を返します。ユリウス日のカウント値がこの値より小さい場合は、BCE (紀元前) の日付が返されます。これは、年の前にマイナス記号を付けて表示されます。
既定では、%DateOpens in a new tab データ型は 1840 年 12 月 31 日より前の日付を表しません。ただし、このデータ型の MINIVAL パラメータを再定義すると、それより前の日付を西暦 1 年 1 月 1 日まで、負の整数として表すことができます。この負の整数による日付の表記には、ここで説明するユリウス日付形式とは互換性がありません。詳細は、"データ型" を参照してください。
ユリウス日のカウントは常に内部的に 7 桁の数で表記され、必要に応じて先頭にゼロが付きます。TO_DATE では、先頭にゼロを付けずにユリウス日のカウントを入力できます。許可されている最大のユリウス日付は 5373484 で、12/31/9999 を返します。許可されている最小のユリウス日付は 0000001 で、01/01/-4712 (BCE 4713 年 1 月 1 日) を返します。値がこの範囲外の場合には、SQLCODE -400 エラーが生成されます。
1721424 (1/1/1) より前のユリウス日のカウントには、Oracle など、他のソフトウェア実装と互換性があります。このカウントは、通常の用法における BCE 日付と同一ではありません。通常の用法では、0 年は存在せず、日付の範囲は 12/31/-1 から 1/1/1 になります。Oracle の用法では、1721058 から 1721423 までのユリウス日は単純に無効となり、エラーが返されます。InterSystems IRIS では、ユリウス日がこの範囲内にあると、存在しない 0 年がプレースホルダとして返されます。したがって、BCE 日付を使用する計算は、1 年調整して通常の用法に対応させる必要があります。これは、TO_CHAR および TO_DATE の使用による日付とユリウス日のカウントの相互変換に影響を与えることはありませんが、ユリウス日のカウントを使用して行う計算の一部に影響が及ぶ場合があります。また、これらの日付のカウントでは、グレゴリオ暦の導入による日付の変更が考慮されないことに注意してください。
TO_DATE では、ユリウス日のカウントに対応する日付式を返すことができます。TO_CHAR では、以下の例のように、日付式に対応するユリウス日のカウントを返すことができます。
SELECT
TO_CHAR('1776-07-04','J') AS JulianCount, -- 2369916
TO_DATE(2369916,'J') AS JulianDate -- 1776-07-04
代替案
ObjectScript で同等の日付変換を実行するには、TODATE()Opens in a new tab メソッドを使用します。
$SYSTEM.SQL.Functions.TODATE(dateString,format)