3.5.3. 日付および時刻の関数
日付、時刻、またはタイムスタンプで日時関数が戻るか、または操作します。
日時関数は、java.text.SimpleDateFormat クラス内で確立された規則を使用して、これらの関数と共に使用できる形式を定義します。このクラスがどのように形式を定義するかについては、SimpleDateFormat の Javadocs を参照してください。
機能 | 定義 | データタイプ制約 |
---|---|---|
CURDATE() CURRENT_DATE[()] | 現在の日付を返します。ユーザーコマンド内のすべての呼び出しに同じ値が返されます。 | 日付を返します。 |
CURTIME() | 現在の時間を返します。ユーザーコマンド内のすべての呼び出しに同じ値を返します。CURRENT_TIME も参照してください。 | 時間を返します。 |
NOW() | 現在のタイムスタンプ(ミリ秒の精度あり)を返します。ユーザーコマンドまたは手順命令のすべての呼び出しに同じ値を返します。CURRENT_TIMESTAMP も参照してください。 | タイムスタンプを返します。 |
CURRENT_TIME[(precision)] | 現在の時間を返します。ユーザーコマンド内のすべての呼び出しに同じ値を返します。Data Virtualization の時間タイプは少秒をトラッキングしないため、精度の引数が事実上無視されます。精度がない場合、CURTIME()と同じです。 | 時間を返します。 |
CURRENT_TIMESTAMP[(precision)] | 現在のタイムスタンプ(ミリ秒の精度あり)を返します。ユーザーコマンドまたは手順命令で、同じ精度を持つすべての呼び出しに同じ値を返します。精度がない場合、NOW()と同じです。現在のタイムスタンプには、デフォルトでミリ秒の精度しかないため、精度を 3 よりも大きく設定すると効果はありません。 | タイムスタンプを返します。 |
DAYNAME(x) | デフォルトのロケールで日名を返します。 | X in {date, timestamp}, returns string |
DAYOFMONTH(x) | 戻る日 | X in {date, timestamp}(整数を返します) |
DAYOFWEEK(x) | 曜日を返します(日: 平日=1, Saturday=7) | X in {date, timestamp}(整数を返します) |
DAYOFYEAR(x) | 日付番号を年で返します。 | X in {date, timestamp}(整数を返します) |
EPOCH(x) | マイクロ秒の精度を持つ unix エポックからの経過時間(秒単位) | X in {date, timestamp}, returns double |
EXTRACT(YEAR|MONTH|DAY |HOUR|MINUTE|SECOND|QUARTER|EPOCH FROM x) | 日付値 x から指定のフィールド値を返します。関連する YEAR、MONTH、DAYOFMONTH、HOUR、MINUTE、SECOND、QUARTER、EPOCH 関数と同じ結果を生成します。SQL 仕様では、TIMEZONE_HOUR および TIMEZONE_MINUTE を抽出ターゲットとして許可します。Data Virtualization では、日付の値はすべてサーバーのタイムゾーンになります。 | X in {date, time, timestamp}, epoch returns double, other return integer |
FORMATDATE(x, y) | y 形式を使用した日付 x の形式。 | X は date、y は文字列で、文字列を返します。 |
FORMATTIME(x, y) | y 形式を使用した時間 x のフォーマット。 | X は時間で、y は文字列を返します。文字列を返します。 |
FORMATTIMESTAMP(x, y) | y 形式を使用したタイムスタンプ x の形式。 | X はタイムスタンプで、y は文字列を返します。文字列を返します。 |
FROM_MILLIS (millis) | 指定のミリ秒の Timestamp 値を返します。 | 長い UTC タイムスタンプ(ミリ秒単位) |
FROM_UNIXTIME (unix_timestamp) | デフォルトの yyyy/mm/dd hh:mm:ss で、Unix タイムスタンプを String 値として返します。 | 長い Unix タイムスタンプ(秒単位) |
hOUR(x) | 時間を返します(通常の 24 時間形式)。 | X in {time, timestamp}(整数を返します) |
MINUTE(x) | 分を返します。 | X in {time, timestamp}(整数を返します) |
MODIFYTIMEZONE(timestamp、startTimeZone、endTimeZone) | 開始タイムゾーンと終了タイムゾーン間で異なる値に調整された受信タイムスタンプに基づいてタイムスタンプを返します。 サーバーが GMT-6 にある場合は、Fixzone({ts '2006-01-10 04:00:00.0'},'GMT-7', 'GMT-8')はタイムスタンプ {ts '2006-01-10 05:00:00.0'} を返します。この値は、GMT-7 と GMT-8 の相違点を補正するために 1 時間前に調整されています。 | startTimeZone および endTimeZone は文字列で、タイムスタンプを返します。 |
MODIFYTIMEZONE(timestamp, endTimeZone) | modifytimezone(timestamp, startTimeZone, endTimeZone)と同様にタイムスタンプを返しますが、startTimeZone がサーバープロセスと同じであると仮定します。 | タイムスタンプはタイムスタンプで、endTimeZone は文字列で、タイムスタンプを返します。 |
MONTH(x) | 戻る月。 | X in {date, timestamp}(整数を返します) |
MONTHNAME(x) | デフォルトのロケールで月を返します。 | X in {date, timestamp}, returns string |
PARSEDATE(x, y) | y 形式を使用して、x から date を解析します。 | X, y in {string}, returns date |
PARSETIME(x, y) | y 形式を使用して、x からの時間を解析します。 | X, y in {string}, returns time |
PARSETIMESTAMP(x,y) | y 形式を使用して、x からのタイムスタンプを解析します。 | X, y in {string}, returns timestamp |
QUARTER(x) | 送金を返します。 | X in {date, timestamp}(整数を返します) |
SECOND(x) | 戻り値の秒数。 | X in {time, timestamp}(整数を返します) |
TIMESTAMPCREATE(date, time) | 日付と時刻からタイムスタンプを作成します。 | 日付 in {date}, time in {time}, return timestamp |
TO_MILLIS (timestamp) | UTC タイムスタンプをミリ秒単位で返します。 | タイムスタンプ値 |
UNIX_TIMESTAMP (unix_timestamp) | 長い Unix タイムスタンプ(秒単位)を返します。 | yyyy/mm/dd hh:mm:ss のデフォルト形式の unix_timestamp 文字列 |
WEEK(x) | 1 ~53 年で週を返します。カスタマイズ情報は、『 管理者ガイド』の「 システムプロパティー 」を参照してください。 | X in {date, timestamp}(整数を返します) |
YEAR(x) | 4 桁の年を返します。 | X in {date, timestamp}(整数を返します) |
Timestampadd
指定の間隔をタイムスタンプに追加します。
構文
TIMESTAMPADD(interval, count, timestamp)
TIMESTAMPADD(interval, count, timestamp)
引数
名前 | 説明 |
---|---|
interval | 日時間隔の単位は、以下のキーワードのいずれかになります。
|
count | タイムスタンプに追加するユニットの長い数または整数数。負の値は、その単位数に減算します。Long 値は TIMESTAMPDIFF とのシンボリメトに許可されますが、有効な範囲は整数値に制限されます。 |
timestamp | 日時式。 |
例
SELECT TIMESTAMPADD(SQL_TSI_MONTH, 12,'2016-10-10') SELECT TIMESTAMPADD(SQL_TSI_SECOND, 12,'2016-10-10 23:59:59')
SELECT TIMESTAMPADD(SQL_TSI_MONTH, 12,'2016-10-10')
SELECT TIMESTAMPADD(SQL_TSI_SECOND, 12,'2016-10-10 23:59:59')
Timestampdiff
2 つのタイムスタンプが長い値を返す間に超過した日付部分の間隔を計算します。
構文
TIMESTAMPDIFF(interval, startTime, endTime)
TIMESTAMPDIFF(interval, startTime, endTime)
引数
名前 | 説明 |
---|---|
interval | 日時間隔の単位。Timestampadd で使用されるキーワードと同じです。 |
startTime | 日時式。 |
endTime | 日時式。 |
例
SELECT TIMESTAMPDIFF(SQL_TSI_MONTH,'2000-01-02','2016-10-10') SELECT TIMESTAMPDIFF(SQL_TSI_SECOND,'2000-01-02 00:00:00','2016-10-10 23:59:59') SELECT TIMESTAMPDIFF(SQL_TSI_FRAC_SECOND,'2000-01-02 00:00:00.0','2016-10-10 23:59:59.999999')
SELECT TIMESTAMPDIFF(SQL_TSI_MONTH,'2000-01-02','2016-10-10')
SELECT TIMESTAMPDIFF(SQL_TSI_SECOND,'2000-01-02 00:00:00','2016-10-10 23:59:59')
SELECT TIMESTAMPDIFF(SQL_TSI_FRAC_SECOND,'2000-01-02 00:00:00.0','2016-10-10 23:59:59.999999')
(endTime > startTime)の場合は、負の値以外の数値が返されます。(endTime < startTime)の場合は、正の値以外の数値が返されます。日付の部分の差異は、タイムスタンプの近づく方法に関係なくカウントされます。たとえば、「2000-01-02 00:00:00.0」は「2000-01-01 23:59:59.999999」よりも 1 時間前に考慮されます。
互換性の問題
- SQL では、Timestampdiff は通常整数を返します。ただし、Data Virtualization の実装は長く返されます。プッシュされたタイムスタンプdiff から整数値が整数の範囲から外すことが予想されると例外が発生することがあります。
- Teiid 8.2 以前のバージョンでのタイムスタンプの diff の実装は、正規間隔の概算数(1 年で 365 日、月に 30 日、30 日単位など)に基づいた値を返します。たとえば、2013-03-24 から 2013-04-01 の月間における差異は 0 でしたが、相互にまたがる日付部分を基にしたのは 1 です。後方互換性に関する情報は、『Adminstrator 's Guide』の 「 System Properties 」を参照してください。
文字列からの日付データタイプの解析
データ仮想化は、'19970101' や '31/1/1996' など、異なる形式で表示される日付が含まれる文字列を暗黙的に変換しません。ただし、次のセクションで説明する parseDate、parseTime、および parseTimestamp 関数を使用して、異なる形式の文字列を明示的に適切なデータタイプに変換できます。これらの関数は、java.text.SimpleDateFormat クラス内で確立された規則を使用して、これらの関数で使用することのできる形式を定義します。このクラスによる日時の文字列形式の定義方法に関する詳細は、「 Javadocs for SimpleDateFormat 」を参照してください。フォーマット文字列は、お使いの Java のデフォルトロケールに固有のものであることに注意してください。
たとえば、これらの関数呼び出しに java.text.SimpleDateFormat 規則に準拠するフォーマット文字列を指定して、文字列を解析し、必要なデータタイプを返すことができます。
文字列 | 文字列を解析する関数呼び出し |
---|---|
'1997010' | parseDate(myDateString, 'yyyyMMdd') |
'31/1/1996' | parseDate(myDateString, 'dd''/''MM''/''yyyy') |
'22:08:56 CST' | parseTime (myTime, 'HH:mm:ss z') |
'03.24.2003 at 06:14:32' | parseTimestamp(myTimestamp, 'MM.dd.yyyy''at''hh:mm:ss') |
タイムゾーンの指定
タイムゾーンは複数の形式で指定できます。「Eastern 標準時間」の EST などの一般的な省略は許可されますが、曖昧になってしまう可能性があるため、使用は推奨されません。あいまいなタイムゾーンは、continent または ocean/largest city 形式で定義されます。たとえば、America/New_York、America/Buenos_Aires、または Europe/London です。さらに、GMT オフセット GMT[+/-]HH:MM でカスタムのタイムゾーンを指定できます。
例: GMT-05:00