次の方法で共有


日付、時刻、およびタイムスタンプのリテラル

日付、時刻、およびタイムスタンプのリテラルのエスケープ シーケンスは次のとおりです。

{ -type ' value '}

リテラル型 は、次の表に示す値のいずれかです。

リテラル型 意味 の形式
d yyyy-mm-dd
t 時刻* hh:mm:ss[1]
ts タイムスタンプ yyyy-mm-dd hh:mm:ss[.f...][1]

[1] 秒の部分を含む時刻またはタイムスタンプ間隔リテラルの小数点の右側の桁数は、SQL_DESC_PRECISION 記述子フィールドに含まれる秒の有効桁数に依存します。 (詳細については、「SQLSetDescField」を参照してください。)

日付、時刻、およびタイムスタンプのエスケープ シーケンスの詳細については、「付録 C: SQL 文法」の「日付、時刻、およびタイムスタンプエスケープ シーケンス」を参照してください。

たとえば、次の SQL ステートメントの両方で、受注テーブルの販売注文 1023 のオープン日が更新されます。 最初のステートメントでは、エスケープ シーケンス構文を使用します。 2 番目のステートメントでは、DATE 列に Oracle Rdb ネイティブ構文が使用され、相互運用できません。

UPDATE Orders SET OpenDate={d '1995-01-15'} WHERE OrderID=1023  
UPDATE Orders SET OpenDate='15-Jan-1995' WHERE OrderID=1023  

日付、時刻、またはタイムスタンプ リテラルのエスケープ シーケンスは、日付、時刻、またはタイムスタンプ パラメーターにバインドされた文字変数に配置することもできます。 たとえば、次のコードでは、文字変数にバインドされた日付パラメーターを使用して、Orders テーブルの販売注文 1023 の開いている日付を更新します。

SQLCHAR      OpenDate[56]; // The size of a date literal is 55.  
SQLINTEGER   OpenDateLenOrInd = SQL_NTS;  
  
// Bind the parameter.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_TYPE_DATE, 0, 0,  
                  OpenDate, sizeof(OpenDate), &OpenDateLenOrInd);  
  
// Place the date in the OpenDate variable. In addition to the escape  
// sequence shown, it would also be possible to use either of the  
// strings "{d '1995-01-15'}" and "15-Jan-1995", although the latter  
// is data source-specific.  
strcpy_s( (char*) OpenDate, _countof(OpenDate), "{d '1995-01-15'}");  
  
// Execute the statement.  
SQLExecDirect(hstmt, "UPDATE Orders SET OpenDate=? WHERE OrderID = 1023", SQL_NTS);  

ただし、通常は、パラメーターを日付構造に直接バインドする方が効率的です。

SQL_DATE_STRUCT   OpenDate;  
SQLINTEGER        OpenDateInd = 0;  
  
// Bind the parameter.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_TYPE_DATE, SQL_TYPE_DATE, 0, 0,  
                  &OpenDate, 0, &OpenDateLen);  
  
// Place the date in the dsOpenDate structure.  
OpenDate.year = 1995;  
OpenDate.month = 1;  
OpenDate.day = 15;  
  
// Execute the statement.  
SQLExecDirect(hstmt, "UPDATE Employee SET OpenDate=? WHERE OrderID = 1023", SQL_NTS);  

ドライバーが日付、時刻、またはタイムスタンプ リテラルの ODBC エスケープ シーケンスをサポートしているかどうかを判断するために、アプリケーションは SQLGetTypeInfo を呼び出します。 データ ソースが日付、時刻、またはタイムスタンプのデータ型をサポートしている場合は、対応するエスケープ シーケンスもサポートする必要があります。

データ ソースでは、ANSI SQL-92 仕様で定義されている datetime リテラルもサポートできます。これは、日付、時刻、またはタイムスタンプ リテラルの ODBC エスケープ シーケンスとは異なります。 データ ソースが ANSI リテラルをサポートしているかどうかを判断するためには、アプリケーションは SQL_ANSI_SQL_DATETIME_LITERALS オプションを使用して SQLGetInfo を呼び出します。

ドライバーが間隔リテラルの ODBC エスケープ シーケンスをサポートしているかどうかを判断するために、アプリケーションは SQLGetTypeInfo を呼び出します。 データ ソースが datetime 間隔データ型をサポートしている場合は、対応するエスケープ シーケンスもサポートする必要があります。

データ ソースでは、ANSI SQL-92 仕様で定義されている datetime リテラルもサポートできます。これは、datetime 間隔リテラルの ODBC エスケープ シーケンスとは異なります。 データ ソースが ANSI リテラルをサポートしているかどうかを判断するためには、アプリケーションは SQL_ANSI_SQL_DATETIME_LITERALS オプションを使用して SQLGetInfo を呼び出します。