Condividi tramite


Valori letterali data, ora e timestamp

La sequenza di escape per i valori letterali data, ora e timestamp è

{-type'value'}

dove literal-type è uno dei valori elencati nella tabella seguente.

literal-type Significato Formato di value
g Data aaaa-mm-gg
o Ora* hh:mm:ss[1]
ts Timestamp yyyy-mm-ddhh:mm:ss[.f...][1]

[1] Il numero di cifre a destra del separatore decimale in un valore letterale intervallo di tempo o timestamp che contiene un componente secondi dipende dalla precisione dei secondi, in base a quanto contenuto nel campo descrittore SQL_DESC_PRECISION. Per altre informazioni, vedere SQLSetDescField.

Per altre informazioni sulle sequenze di escape data, ora e timestamp, vedere Sequenze di escape data, ora e timestamp nell'Appendice C: Grammatica SQL.

Ad esempio, entrambe le istruzioni SQL seguenti aggiornano la data di apertura dell'ordine cliente 1023 nella tabella Orders. La prima istruzione usa la sintassi della sequenza di escape. La seconda istruzione usa la sintassi nativa Oracle Rdb per la colonna DATA e non è interoperabile.

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

La sequenza di escape di un valore letterale data, ora o timestamp può anche essere inserita in una variabile di caratteri associata a un parametro data, ora o timestamp. Ad esempio, il codice seguente usa un parametro data associato a una variabile di caratteri per aggiornare la data di apertura dell'ordine cliente 1023 nella tabella Orders:

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);  

Tuttavia, in genere è più efficiente associare il parametro direttamente a una struttura di data:

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);  

Per determinare se un driver supporta le sequenze di escape ODBC per i valori letterali data, ora o timestamp, un'applicazione chiama SQLGetTypeInfo. Se l'origine dati supporta il tipo di dati data e ora o timestamp, allora supporta anche la sequenza di escape corrispondente.

Le origini dati possono supportare anche i valori letterali datetime definiti nella specifica ANSI SQL-92, che sono diversi dalle sequenze di escape ODBC per i valori letterali data, ora o timestamp. Per determinare se un'origine dati supporta i valori letterali ANSI, un'applicazione chiama SQLGetInfo con l'opzione SQL_ANSI_SQL_DATETIME_LITERALS.

Per determinare se un driver supporta le sequenze di escape ODBC per i valori letterali intervallo, un'applicazione chiama SQLGetTypeInfo. Se l'origine dati supporta un tipo di dati intervallo datetime, allora supporta anche la sequenza di escape corrispondente.

Le origini dati possono supportare anche i valori letterali datetime definiti nella specifica ANSI SQL-92, che sono diversi dalle sequenze di escape ODBC per i valori letterali intervallo datetime. Per determinare se un'origine dati supporta i valori letterali ANSI, un'applicazione chiama SQLGetInfo con l'opzione SQL_ANSI_SQL_DATETIME_LITERALS.