日付と時刻は次のいずれかの方法でデータベースに送信できます。
インターフェイスを使うときは、文字列として
ODBC または OLE DB を使うときは、バイナリ値として (例:ODBC TIMESTAMP_STRUCT 構造体を使用する)
Embedded SQL を使うときは、SQLDATETIME 構造体として
タイムゾーンオフセット付きの日付と時刻は、データベースに文字列としてのみ送信できます。
日付を文字列 (DATE データ型用) として、または文字列の一部 (TIMESTAMP データ型または TIMESTAMP WITH TIME ZONE データ型用) としてデータベースに送信する場合、文字列は、日付と時刻の表現の国際標準である ISO 8601 によって記述されるものなど、いくつものさまざまな方法で指定できます。
日付は、次の ISO 8601 フォーマットの 1 つで指定できます。
暦日 暦日フォーマットは YYYY-MM-DD であり、YYYY はグレゴリオ暦の年、MM は 01 (1 月) から 12 (12 月) までの月、DD は 01 から 31 までの日になります。たとえば、'2010-04-01' は、2010 年 4 月 1 日を表します。ISO 8601 は区切り文字を要求しません。そのため、'20100401' も 2010 年 4 月 1 日を表します。
ISO 暦日 | フォーマット | 例 |
---|---|---|
基本 | YYYYMMDD | 20100401 |
拡張 | YYYY-MM-DD | 2010-04-01 |
週日 もう 1 つの ISO 日付フォーマットが週日です。このフォーマットは YYYY-Www-D であり、YYYY はグレゴリオ暦の年、W は文字 W、ww は 01 (第 1 週) から 52 または 53 (最終週) までの年内の暦週、D は 1 (月曜日) から 7 (日曜日) までの週内の曜日です。たとえば、'2010-W13-4' は、2010 年の 13 番目の週の 4 番目の日 (2010 年 4 月 1 日) を表します。ISO 8601 は区切り文字を要求しません。そのため、'2010W134' も 2010 年の 13 番目の週の 4 番目の日を表します。精度を下げた場合、1 桁目を表現から省略できます ('2010W13' は 2010 年 3 月 29 日を表します)。
ISO 週日 | フォーマット | 例 |
---|---|---|
基本 | YYYYWwwD | 2010W134 |
拡張 | YYYY-Www-D | 2010-W13-4 |
年内の日の番号 最後の ISO 日付フォーマットは、年内の日の番号です。フォーマットは YYYY-DDD であり、YYYY はグレゴリオ暦の年、DDD はその暦年内で第何日目かを指します。たとえば、'2010-091' は 2010 年 4 月 1 日を表します。ISO 8601 は区切り文字を要求しません。たとえば、'2010091'も 2010 年 4 月 1 日を表します。年内の日の番号の最大値は、閏年用の 366 です。たとえば、'2008366' は、2008 年の最後の日 (2008 年 12 月 31 日) を表します。
ISO 年内の日の番号 | フォーマット | 例 |
---|---|---|
基本 | YYYYDDD | 2010091 |
拡張 | YYYY-DDD | 2010-091 |
これら以外の日付フォーマットもサポートされています。SQL Anywhere は、日付を含む文字列を非常に柔軟に解釈します。あいまいである場合は、date_order および nearest_century データベースオプション設定に従って日付値の解釈が行われます。たとえば、date_order 設定に従い、'02/05/2002' は、データベースサーバーの解釈によって、5 月 2 日 (DMY) とすることも、2 月 5 日 (MDY) とすることも、無効な値 (YMD) とすることもできます。
nearest_century 設定は、2 桁の年の値を 20 世紀と 21 世紀のどちらとして解釈するかを決定します。たとえば、文字列 '02/05/10' において、date_order 設定が 02 と 10 のどちらを年として解釈するのかを決定し、nearest_century 設定が 02 で 1902 年と 2002 年のどちらか、または 10 で 1910 年 2010 年のどちらを表すのかを決定します。nearest_century オプションの値は、2 桁の年数の解釈に影響します。nearest_century より少ない値には 2000 が加算され、その他のすべての値には 1900 が加算されます。このオプションのデフォルト値は 50 です。そのため、デフォルトで 50 年は 1950 年、49 年は 2049 年と解釈されます。
次の表は、指定された date_order 設定と 50 の nearest_century 設定を使って、2010 年の 4 月 1 日をどのように指定できるのかを示しています。
date_order | フォーマット | 例 |
---|---|---|
YMD | YYYY/MM/DD | 2010/04/01 |
YMD | YY/MM/DD | 10/04/01 |
MDY | MM/DD/YYYY | 04/01/2010 |
MDY | MM/DD/YY | 04/01/10 |
DMY | DD/MM/YYYY | 01/04/2010 |
DMY | DD/MM/YY | 01/04/10 |
ISO 8601 フォーマットはあいまいではなく、date_order と nearest_century のユーザー設定の影響を受けないので、ISO 8601 を使用することをおすすめします。
また、日付は月の名前を使って指定することもできます。たとえば、'2010 April 01'、'April 1, 2010'、'1 April 2010' などがあります。年があいまいに指定された場合、date_order オプションを使って、年と日の部分を分解できます。そのため、'01 April 10' は、date_order が 'YMD' のときは 2001 年 4 月 10 日と解釈され、date_order が 'DMY' のときは 2010 年 4 月 1 日と解釈されます。
日付の中の年の値の範囲は 0001 ~ 9999 です。SQL Anywhere の最小日付は 0001-01-01 です。
文字列に部分的な日付指定だけがある場合、デフォルト値を使って日付が満たされます。次のデフォルトを使います。
年 年が何も指定されない場合 ('April 1' など) は、現在の年が使用されます。
月 年と月が何も指定されない('23:59:59'など)の場合は、現在の月が使用されます。また、年が指定された場合('2010'など)は、01が使用されます。
日 年と月が何も指定されない('23:59:59'など)の場合は、現在の日が使用されます。また、月が指定された場合('April'など)は、01が使用されます。
次の例では、現在の日付から日付値が構築されます。
SELECT CAST('23:59:59' AS TIMESTAMP) |
時刻は、24 時間管理システムを使って ISO 8601 フォーマットで指定できます。これは hh:mm:ss であり、hh は真夜中から経過した完全な時間数、mm は時間の始めからの完全な分数、ss は分のはじめからの完全な秒数です。たとえば、'23:59:59' は真夜中より 1 秒前の時刻を表します。
ISO 8601 標準では、秒と分を省略できます。たとえば、'23:59' は真夜中より 60 秒前の時刻を表します。
ISO 8601 標準は、また、秒単位に小数を含めることができます。小数の秒は、カンマ (,) またはピリオド (.) を使って指定されます。秒の小数は、最大小数第 6 位まで格納されます。たとえば、'23:59:59,500000' と '23:59:59.500000' は、どちらも真夜中より 1/2 秒前の時刻を表します。SQL Anywhere は分または時間の小数をサポートしません。
ISO 8601 は、時刻が日付仕様に含まれるときには、コロン区切り文字を必要としません。たとえば、'235959' は真夜中より 1 秒前の時刻を表します。
日の最大時刻は '24:00:00' です。これは真夜中を表します。日付と組み合わせると、これは真夜中、または次の日の 00:00:00 を表します。たとえば、'2010-04-01 24:00:00' は '2010-04-02 00:00:00' と同じです。
ISO 時刻 | フォーマット | 例 |
---|---|---|
基本 (日付あり) | hhmmss.ssssss | 20100401 235959.500000 |
基本 (日付あり) | hhmmss,ssssss | 20100401 235959,500000 |
拡張 | hh:mm:ss.ssssss | 23:59:59.500000 |
拡張 | hh:mm:ss,ssssss | 23:59:59,500000 |
ISO 以外の AM と PM の指示子もサポートされています。たとえば、'11:59:59 PM' は '23:59:59' と同じです。
AM/PM | フォーマット | 例 |
---|---|---|
AM | hh:mm:ss.ssssss AM | 11:59:59.500000 AM |
AM | hh:mm:ss,ssssss AM | 11:59:59,500000 AM |
PM | hh:mm:ss.ssssss PM | 11:59:59.500000 PM |
PM | hh:mm:ss,ssssss PM | 11:59:59,500000 PM |
ISO 8601 では、日付と時刻で、スペースまたは文字 T を使用して組み合わせることができます。たとえば、'2010-04-01 23:59:59' と '2010-04-01T23:59:59' はどちらも 2010 年 4 月 1 日の真夜中よりも 1 秒前を表します。ハイフンとコロンの区切り文字は省略できます。たとえば、'20100401T235959' も同じ日付と時刻を表します。
SQL Anywhere は、日付と時刻のフォーマットの基本と拡張の組み合わせをサポートします。たとえば、'20100401T23:59:59' は基本フォーマットと拡張フォーマットの両方を組み合わせています。
ISO 8601 は、また、日文字列の日付と時刻にタイムゾーンオフセットを追加することを許可します。フォーマットは次のいずれかになります。
Z (ズールー) 日付と時刻は、協定世界時 (UTC: Coordinated Universal Time) 単位になります。たとえば、'2010-04-01 23:00:00Z' は、2010 年 4 月 1 日の協定世界時 11:00 PM を表します。
+hh:mm 指定された日付と時刻は、UTC より、指定された時間と分だけ進んでいます。たとえば、'2010-04-01 23:00:00+04:00' は、UTC から 4 時間東のタイムゾーンでの 2010 年 4 月 1 日の 11:00 PM を表します。
-hh:mm 指定された日付と時刻は、UTC より、指定された時間と分だけ遅れています。たとえば、'2010-04-01 23:00:00-05:00' は、UTC から 5 時間西のタイムゾーンでの 2010 年 4 月 1 日の 11:00 PM を表します。
分が 0 の場合、タイムゾーンオフセットで指定する必要はありません。また、スペースをタイムゾーンオフセットの前に含めることもできます。たとえば、'2010-04-01 23:00:00 -03:30' は、UTC から 3 時間半西のタイムゾーンでの 2010 年 4 月 1 日の 11:00 PM を表します。
ISO タイムゾーン | フォーマット | 例 |
---|---|---|
基本 | Z | 20100401 235959Z |
基本 | +hhmm | 20100401 235959+0400 |
基本 | +hh | 20100401 235959+04 |
基本 | -hhmm | 20100401 235959-0500 |
基本 | -hh | 20100401 235959-05 |
基本 | T を小数に使用 | 20100401T235959.50-0330 |
拡張 | Z | 2010-04-01 23:59:59Z |
拡張 | +hh:mm | 2010-04-01 23:59:59+04:00 |
拡張 | -hh:mm | 2010-04-01 23:59:59-05:00 |
拡張 | T を小数に使用 | 2010-04-01T23:59:59.50-03:30 |
SQL Anywhere は、日付、時刻、タイムゾーンのフォーマットの基本と拡張の組み合わせをサポートします。たとえば、'20100401T23:59:59-05' は基本フォーマットと拡張フォーマットの両方を組み合わせています。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |