フォーマットされた文字列を日付 (あるいは日付をフォーマットされた文字列) に変換する汎用 SQL 文字列関数です。
Synopsis
TO_DATE(date-expression[,format])

TODATE(date-expression[,format])
引数
date-expression 変換される式。式は、DATE データ型の値または 1 ~ 2980013 の整数になります。format を指定した場合、基本となるデータ型が CHAR または VARCHAR2 の文字列日付式にすることもできます。
format オプションdate-expression の形式を指定する日付形式。'J' が指定される場合、date-expression は整数となります。format が省略されると、'DD MON YYYY' が既定値です。この既定は変更できます。
概要
TO_DATETODATE は互換性があり、Oracle 互換性のためにサポートされています。
TO_DATE 関数には、以下の 2 つの使用法があります。
TO_DATE は、さまざまな文字列フォーマットで日付を入力して表示するために使用されます。DATE データ型の変換を実行するには、CAST 関数または CONVERT 関数を使用します。
以下のメソッド・コールを使用することで、Caché ObjectScript からこの関数を呼び出すこともできます。
$SYSTEM.SQL.TODATE(date-expression,format)
日付フィールド検索の表示形式
TO_DATE を使用して、日付フィールドの検索に対する表示形式を指定します。TO_DATE のこの形式は、データベースからの値の検索を目的として、SELECT 文内で主に使用されます。
date-expression 値は、有効な Logical %Date 値でなければならず、その値は DATE データ型の値か、0 (12/31/1840) から 2980013 (12/31/9999) の間の整数値のいずれかになります。TO_DATE は、日付 (例えば、59589) に対応する整数 date-expression を受け取ります。$HOROLOG 日付/時刻文字列 (例えば、"59589,43381") は受け取りません。TO_DATE は、指定された format 内の対応する日付を含む文字列を返します。
既定の日付形式
format が指定されていない場合、TO_DATE は、既定の形式で日付を返します。出荷時の既定の形式は、DD MON YYYY です。例えば、'11 Nov 1993' です。この既定の形式は、以下の方法で変更できます。
以下の例は、既定の format を使用して有効な date-expression を指定する複数の方法を示しています。
SELECT DISTINCT DOB,
   TO_DATE(DOB) AS DateIn,
   TO_DATE(59651) AS IntIn,
   TO_DATE('59651') AS IntStrIn,
   TO_DATE(CAST('1993-11-12' AS DATE)) AS DateCastIn
FROM Sample.Person
形式の要素
format は、以下の規則に従って指定された 1 つまたは複数の形式要素の文字列です。
日付形式の要素
以下のテーブルは、整数を日付文字列に変換する際に format パラメータに対して有効な日付形式要素のリストです。
要素 意味
D 曜日 (1 ~ 7、1 は日曜日を指す)
DD 2 桁の日付 (01 ~ 31)
DY 現在のロケールの WeekdayAbbr プロパティによって指定される、曜日の略名。既定は、Sun Mon Tue Wed Thu Fri Sat です。
DAY 現在のロケールの WeekdayName プロパティが指定する曜日名。既定は、Sunday Monday Tuesday Wednesday Thursday Friday Saturday です。
MM 2 桁の月数 (01 ~ 12、01 = 1 月)
MON 現在のロケールの MonthAbbr プロパティによって指定される月の略名。既定は、Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec です。略名の後にはピリオドを付けません。
MONTH 現在のロケールの MonthName プロパティによって指定される正式な月名。既定は、January February March April May June July August September October November December です。
RR 2 桁の年数
YYYY 4 桁の年数
YYY 下 3 桁の年数
YY 下 2 桁の年数
Y 下 1 桁の年数
SET OPTION 文を使用して、これらの要素の既定値を変更できます。
ユリウス日
"ユリウス"日の形式は、1840 年より前 (および 9999 年より後) の日付の表示を可能にするために提供されています。
文字 'J' を含む文字列で構成される format を指定する場合、返される日付は、紀元前 (BCE) 4713 年 1 月 1 日からカウントされた "ユリウス" 日になります。文字 'J' のみが、この format 文字列内で指定できます。その他すべての文字を取り込むと、文字 'J' がリテラルとして処理され、日付は標準の日付として変換されます。
ユリウス日は、既定形式 DD MON YYYY で表示し、BCE (西暦紀元前) の日付に対して接尾語の文字 'BC' を追加します。現在により近い (CE または AD) 日付には接尾辞を付けません。
ユリウス日には、最大 date-expression 値はありません。
以下の例は、29 May 4550BC を返します。
SELECT DISTINCT TO_DATE(59684,'J') AS Julian_Date
FROM Sample.Person
以下の例は、09 May 2005 を返します。
SELECT DISTINCT TO_DATE(2453500,'J') AS Julian_Date
FROM Sample.Person
時刻形式の要素
TO_DATE を使用して、時刻式を文字列に変換できます。todate-expression の値は、有効な論理時刻の値でなければなりません。
形式文字列で使用されている、形式コードでない文字列はすべて、結果文字列のその位置にそのまま戻されます。
以下の表は、このバージョンの TO_DATE で時刻式を変換するときの、有効な時刻の format パラメータ・コードを示しています。
形式コード 意味
HH 時間 (1 ~ 12)
HH12 時間 (1 ~ 12)
HH24 時間 (0 ~ 23)
MI 分 (0 ~ 59)
SS 秒 (0 ~ 59)
SSSSS 午前 0 時 00 分からの秒数 (0 ~ 86388)
AM 午前
PM 午後
日付フィールド検索の例
以下の例は、日付整数 (1840 年 12 月 31 日からの日数) を受け取り、指定された形式で対応する日付を返します。
SELECT DISTINCT TO_DATE(59684,'MM/DD/YYYY')
FROM Sample.Person
これは、05/29/2004 を返します。
SELECT DISTINCT TO_DATE(59684,'DAY MONTH DD, YYYY')
FROM Sample.Person
これは、Saturday May 29, 2004 を返します。
SELECT DISTINCT TO_DATE(59684)
FROM Sample.Person
これは、既定の形式で 29 May 2004 を返します。
SELECT DISTINCT TO_DATE(59684,'I went to the store on DAY.')
FROM Sample.Person
これは、I went to the store on Saturday. を返します。
以下の埋め込み SQL の例では、まず既定の形式で日付を返し、次に既定を変更した後に、新しい既定の形式で同じ日付を返します。
   &sql(SELECT TO_DATE(59684)
        INTO :x
        FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"Date initial default format: ",x }
   DO $SYSTEM.SQL.SetToDateDefaultFormat("YYYY-MM-DD")
   &sql(SELECT TO_DATE(59684)
        INTO :y
        FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"Date new default format: ",y }
以下の埋め込み SQL の例では、形式文字列が区切り文字なしで複数の要素を含むことができる 2 つのケースを示します。
SELECT DISTINCT
       TO_DATE(59684,'DDMMYYYY'),
       TO_DATE(59684,'YYYYMMDD')
FROM Sample.Person
これは 2905200420040529 を返します。
以下の例は、DATE データ型のフィールドを受け取り、この日付のフォーマットされたバージョンを返します。
SELECT DISTINCT DOB, TO_DATE(DOB,'DAY MONTH DD, YYYY')
FROM Sample.Person
以下の例では、現在の日付を返し、指定した形式 (または既定の形式) を使用してその結果をフォーマットするさまざまな日付関数を使用しています。
SELECT DISTINCT 
     TO_DATE(CURRENT_DATE,'MM/DD/YYYY'),
     TO_DATE({fn CURDATE()})
FROM Sample.Person
日付変換の入力形式
次に、TO_DATE を使用して、日付の入力形式を指定し、Logical %Date 値に変換します。date-expression の値は、文字列日付式でなければなりません。date-expression の形式はformat パラメータ内で指定されます。formatdate-expression を有効な %Date 論理値に変換するキーとして使用されます。
以下のテーブルは、TO_DATE のこのバージョンでの format パラメータに対する有効な日付形式要素を示しています。
要素 意味
DD 2 桁の日付 (01 ~ 31)
MM 2 桁の月数 (01 ~ 12、01 = 1 月)
MON 現在のロケールの MonthAbbr プロパティによって指定される月の略名。既定は、前のテーブルと同じです。
MONTH 現在のロケールの MonthName プロパティによって指定される正式な月名。既定は、前のテーブルと同じです。
YYYY 4 桁の年数
YY 下 2 桁の年数
入力形式の例
以下の例は、日付文字列を受け取り、それを指定された形式コードに従って解釈し、対応する $HOROLOG 日付整数を返します。
SELECT DISTINCT 
       TO_DATE('May 29, 2004','MONTH DD, YYYY'),
       TO_DATE('2004***05***29','YYYY***MM***DD'),
       TO_DATE('05/29/2004','MM/DD/YYYY'),
       TO_DATE('29 May 2004')
FROM Sample.Person
これらすべての TO_DATE 関数は、59684 を返します。
関連項目