フォーマットされた文字列を日付 (あるいは日付をフォーマットされた文字列) に変換する汎用 SQL 文字列関数です。
Synopsis
TO_DATE(date-expression[,format])
TODATE(date-expression[,format])
-
日付をフォーマットされた日付表示文字列に変換する。入力日付は、DATE データ型または整数
$HOROLOG 日付値になります。
-
フォーマットされた日付表示文字列を日付に変換する。
TO_DATE は、さまざまな文字列フォーマットで日付を入力して表示するために使用されます。DATE データ型の変換を実行するには、
CAST 関数または
CONVERT 関数を使用します。
以下のメソッド・コールを使用することで、Caché ObjectScript からこの関数を呼び出すこともできます。
format が指定されていない場合、
TO_DATE は、既定の形式で日付を返します。出荷時の既定の形式は、DD MON YYYY です。例えば、'11 Nov 1993' です。この既定の形式は、以下の方法で変更できます。
-
ObjectScript $SYSTEM.SQL.SetToDateDefaultFormat() 関数呼び出し。現在の設定を確認するには、$SYSTEM.SQL.CurrentSettings() を呼び出します。これにより、
TO_DATE() の既定の形式が表示されます。
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 つまたは複数の形式要素の文字列です。
-
-
形式要素の任意のシーケンスや数が許可されます ('J' 要素の例外を除く)。
-
形式文字列 'YYYYMMDD' と 'DDMMYYYY' は、要素間の区切り文字なしで指定できます。
-
その他すべての形式文字列は、英数字でない区切り文字 (スペース、スラッシュ、ハイフンなど) で要素を区切らなければなりません。区切り文字は、出力文字列にリテラルとして表示されます。
-
無効の形式要素の文字は、出力文字列にリテラルとして表示されます。
以下のテーブルは、整数を日付文字列に変換する際に
format パラメータに対して有効な日付形式要素のリストです。
"ユリウス"日の形式は、1840 年より前 (および 9999 年より後) の日付の表示を可能にするために提供されています。
文字 'J' を含む文字列で構成される
format を指定する場合、返される日付は、紀元前 (BCE) 4713 年 1 月 1 日からカウントされた "ユリウス" 日になります。文字 'J' のみが、この
format 文字列内で指定できます。その他すべての文字を取り込むと、文字 'J' がリテラルとして処理され、日付は標準の日付として変換されます。
ユリウス日は、既定形式 DD MON YYYY で表示し、BCE (西暦紀元前) の日付に対して接尾語の文字 'BC' を追加します。現在により近い (CE または AD) 日付には接尾辞を付けません。
SELECT DISTINCT TO_DATE(59684,'J') AS Julian_Date
FROM Sample.Person
SELECT DISTINCT TO_DATE(2453500,'J') AS Julian_Date
FROM Sample.Person
形式文字列で使用されている、形式コードでない文字列はすべて、結果文字列のその位置にそのまま戻されます。
以下の表は、このバージョンの
TO_DATE で時刻式を変換するときの、有効な時刻の
format パラメータ・コードを示しています。
以下の例は、日付整数 (1840 年 12 月 31 日からの日数) を受け取り、指定された形式で対応する日付を返します。
SELECT DISTINCT TO_DATE(59684,'MM/DD/YYYY')
FROM Sample.Person
SELECT DISTINCT TO_DATE(59684,'DAY MONTH DD, YYYY')
FROM Sample.Person
SELECT DISTINCT TO_DATE(59684)
FROM Sample.Person
SELECT DISTINCT TO_DATE(59684,'I went to the store on DAY.')
FROM Sample.Person
以下の埋め込み 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
以下の例は、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
以下の例は、日付文字列を受け取り、それを指定された形式コードに従って解釈し、対応する
$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 を返します。