NOW (SQL)
構文
NOW()
{fn NOW}
{fn NOW()}
概要
NOW は、引数を取りません。引数の括弧は ODBC スカラ構文ではオプションですが、SQL 標準関数構文では必須です。
NOW は、このタイムゾーンの現在のローカル日付とローカル時刻をタイムスタンプとして返します。これはサマータイムなどのローカル時刻調整に合わせて調整されます。
NOW は、%TimeStamp データ型形式 (yyyy-mm-dd hh:mm:ss.ffff) または %PosixTime データ型形式 (エンコードされた 64 ビットの符号付き整数) のいずれかでタイムスタンプを返すことができます。返されるタイムスタンプ形式は以下のルールによって決まります。
-
現在のタイムスタンプがデータ型 %PosixTime のフィールドに対して指定されている場合、現在のタイムスタンプ値は POSIXTIME データ型形式で返されます。例として、WHERE PosixField=NOW() や INSERT INTO MyTable (PosixField) VALUES (NOW()) が挙げられます。
-
現在のタイムスタンプがデータ型 %TimeStamp のフィールドに対して指定されている場合、現在のタイムスタンプ値は TIMESTAMP データ型形式 (yyyy-mm-dd hh:mm:ss) で返されます。ODBC タイプは TIMESTAMP で、LENGTH は 16、PRECISION は 19 です。時間は 24 時間形式で表示されます。先頭のゼロは、すべてのフィールドで維持されます。例として、WHERE TSField=NOW() や INSERT INTO MyTable (TSField) VALUES (NOW()) が挙げられます。
-
現在のタイムスタンプがコンテキストなしで指定されている場合、現在のタイムスタンプ値は TIMESTAMP データ型形式で返されます。例として、SELECT NOW() が挙げられます。
既定の日付/時刻形式を変更するには、各種日付/時刻オプションで SET OPTION コマンドを使用します。
タイムスタンプ、日付、および時刻のデータ型は、CAST または CONVERT 関数を使用して変更できます。
秒の小数部の精度
既定では、NOW は秒の小数部の精度を返しません。精度引数はサポートされません。ただし、システム全体の既定の時刻精度を変更することで、システム全体ですべての NOW 関数が秒の小数部の精度でこの構成された桁数を返すことができます。システム全体の既定の時刻精度における最初の構成設定は 0 (秒の小数部なし) で、最大設定値は 9 です。
システム全体の既定の時刻精度をオーバーライドできる precision 引数を GETDATE で用意している点を除いて、GETDATE は NOW と機能的に同じになります。precision 引数を省略した場合、構成されているシステム全体の既定の時刻精度が GETDATE で使用されます。
CURRENT_TIMESTAMP には、次の 2 つの構文形式があります。引数の括弧がない場合、CURRENT_TIMESTAMP は NOW と機能的に同じになります。引数の括弧がある場合、CURRENT_TIMESTAMP(precision) は、CURRENT_TIMESTAMP() precision 引数が必須である点を除いて、GETDATE と機能的に同じになります。CURRENT_TIMESTAMP() は常に、指定された precision を返し、構成されたシステム全体の既定の時刻精度を無視します。
秒の小数部は、丸められずに、常に指定された精度に切り捨てられます。
SYSDATE は、引数なしの CURRENT_TIMESTAMP 関数と機能的に同じになります。
その他の現在日時関数
NOW、GETDATE、CURRENT_TIMESTAMP、および SYSDATE はすべて、ローカル・タイム・ゾーン設定に基づいて、現在のローカル日付とローカル時刻を返します。
GETUTCDATE は、現在の UTC (協定世界時) 日付と UTC 時刻をタイムスタンプとして返します。UTC 時刻はローカル・タイム・ゾーンに依存しておらず、ローカル時刻調整 (サマータイムなど) の影響は受けないため、異なるタイム・ゾーン間のユーザが同一データベースにアクセスする場合に一貫したタイムスタンプを適用する際にこの関数は便利です。GETUTCDATE は、秒の小数部の精度をサポートします。現在の UTC タイムスタンプは、ObjectScript の $ZTIMESTAMP 特殊変数でも提供されます。
現在の日付のみを返すには、CURDATE または CURRENT_DATE を使用します。現在の時刻のみを返すには、CURRENT_TIME または CURTIME を使用します。これらの関数では、DATE または TIME データ型が使用されます。TIME データ型および DATE データ型では、値は、$HOROLOG 形式で整数として格納されます。これらの関数は、いずれも精度をサポートしません。
例
以下の例は、3 つの構文形式が同等であることを示しています。すべて現在のローカル日付とローカル時刻をタイムスタンプとして返します。
SELECT NOW(),{fn NOW},{fn NOW()}
以下の例は、ローカル・タイムスタンプ (タイム・ゾーン依存) とユニバーサル・タイムスタンプ (タイム・ゾーン非依存) を比較します。
SELECT NOW(), GETUTCDATE()
以下の例は、Orders テーブルの指定された行の LastUpdate フィールドに、現在のシステム日付と時刻を設定します。
UPDATE Orders SET LastUpdate = {fn NOW()}
WHERE Orders.OrderNumber=:ord
関連項目
-
SQL タイムスタンプ関数 : CAST、CONVERT、CURRENT_TIMESTAMP、GETDATE、GETUTCDATE、SYSDATE、TIMESTAMPADD、TIMESTAMPDIFF、TO_TIMESTAMP
-
SQL 現在日時関数 : CURDATE、CURRENT_DATE、CURRENT_TIME、CURTIME
-
ObjectScript : $ZDATETIME 関数、$HOROLOG 特殊変数、$ZTIMESTAMP 特殊変数