Funzioni scalari ODBC (Transact-SQL)
È possibile utilizzare le funzioni scalari ODBC all'interno di istruzioni Transact-SQL. Queste istruzioni sono interpretate da SQL Server ed è possibile utilizzarle in stored procedure e funzioni definite dall'utente. Queste includono funzioni per i valori stringa, numerici, di ora, di data, di intervallo e di sistema.
Utilizzo
SELECT {fn <function_name> [ (<argument>,....n) ] }
Funzioni
Nelle tabelle seguenti sono elencate le funzioni scalari ODBC non duplicate in Transact-SQL.
Funzioni per i valori stringa
Funzione |
Descrizione |
---|---|
BIT_LENGTH(string_exp) (ODBC 3.0) |
Restituisce la lunghezza in bit dell'espressione stringa. Non funziona solo per i dati di tipo stringa. Pertanto, non converte implicitamente string_exp in una stringa ma restituisce le dimensioni interne del tipo di dati fornito. |
CONCAT( string_exp1,string_exp2) (ODBC 1.0) |
Restituisce la stringa di caratteri che risulta dalla concatenazione di string_exp2 e string_exp1. La stringa risultante dipende da DBMS. Ad esempio, se la colonna rappresentata string_exp1 contiene un valore NULL, DB2 restituisce NULL ma SQL Server restituisce una stringa non Null. |
OCTET_LENGTH( string_exp ) (ODBC 3.0) |
Restituisce la lunghezza in byte dell'espressione stringa. Il risultato è il più piccolo numero integer non inferiore al numero di bit diviso per 8. Non funziona solo per i dati di tipo stringa. Pertanto, non converte implicitamente string_exp in una stringa ma restituisce le dimensioni interne del tipo di dati fornito. |
Funzione numerica
Funzione |
Descrizione |
---|---|
TRUNCATE( numeric_exp, integer_exp) (ODBC 2.0) |
Restituisce numeric_exp troncato in corrispondenza di un numero di posizioni pari a integer_exp a destra del separatore decimale. Se integer_exp è negativo, numeric_exp viene troncato in corrispondenza di un numero di posizioni pari a |integer_exp| a sinistra del separatore decimale. |
Funzioni di data, ora e intervallo
Funzione |
Descrizione |
---|---|
CURRENT_DATE( ) (ODBC 3.0) |
Restituisce la data corrente. |
CURRENT_TIME[( time-precision )] (ODBC 3.0) |
Restituisce l'ora locale corrente. L'argomento time-precision determina la precisione a livello di secondi del valore restituito. |
DAYNAME( date_exp ) (ODBC 2.0) |
Restituisce una stringa di caratteri che contiene il nome, specifico dell'origine dati, del giorno (ad esempio, da Sunday a Saturday o da Sun a Sat per un'origine dati che utilizza l'inglese o da lunedì a domenica per un'origine dati che utilizza l'italiano) per la parte relativa al giorno dell'argomento date_exp. |
DAYOFMONTH( date_exp ) (ODBC 1.0) |
Restituisce il giorno del mese in base al campo del mese in date_exp come valore integer nell'intervallo da 1 a 31. |
DAYOFWEEK( date_exp ) (ODBC 1.0) |
Restituisce il giorno della settimana in base al campo della settimana in date_exp come valore integer nell'intervallo da 1 a 7, dove 1 corrisponde al lunedì. |
HOUR( time_exp ) (ODBC 1.0) |
Restituisce l'ora in base al campo dell'ora in time_exp come valore integer nell'intervallo da 0 a 23. |
MINUTE( time_exp ) (ODBC 1.0) |
Restituisce i minuti in base al campo dei minuti in time_exp come valore integer nell'intervallo da 0 a 59. |
MONTHNAME( date_exp ) (ODBC 2.0) |
Restituisce una stringa di caratteri che contiene il nome, specifico dell'origine dati, del mese (ad esempio, da January a December o da Jan a Dec per un'origine dati che utilizza l'inglese o da gennaio a dicembre per un'origine dati che utilizza l'italiano) per la parte relativa al mese dell'argomento date_exp. |
QUARTER( date_exp ) (ODBC 1.0) |
Restituisce il trimestre relativo a date_exp come valore integer nell'intervallo da 1 a 4, dove 1 corrisponde al periodo 1 gennaio-31 marzo. |
WEEK( date_exp ) (ODBC 1.0) |
Restituisce la settimana dell'anno in base al campo della settimana in date_exp come valore integer nell'intervallo da 1 a 53. |
Esempi
A. Utilizzo di una funzione ODBC in una stored procedure
Nell'esempio seguente viene utilizzata una funzione ODBC in una stored procedure:
CREATE PROCEDURE dbo.ODBCprocedure
(
@string_exp nvarchar(4000)
)
AS
SELECT {fn OCTET_LENGTH( @string_exp )};
B. Utilizzo di una funzione ODBC in una funzione definita dall'utente
Nell'esempio seguente viene utilizzata una funzione ODBC in una funzione definita dall'utente:
CREATE FUNCTION dbo.ODBCudf
(
@string_exp nvarchar(4000)
)
RETURNS int
AS
BEGIN
DECLARE @len int
SET @len = (SELECT {fn OCTET_LENGTH( @string_exp )})
RETURN(@len)
END ;
SELECT dbo.ODBCudf('Returns the length.');
--Returns 38
C. Utilizzo di funzioni ODBC nelle istruzioni SELECT
Nella seguente istruzione SELECT vengono utilizzate funzioni ODBC:
DECLARE @string_exp nvarchar(4000) = 'Returns the length.';
SELECT {fn BIT_LENGTH( @string_exp )};
-- Returns 304
SELECT {fn OCTET_LENGTH( @string_exp )};
-- Returns 38
SELECT {fn CONCAT( 'CONCAT ','returns a character string')};
-- Returns CONCAT returns a character string
SELECT {fn TRUNCATE( 100.123456, 4)};
-- Returns 100.123400
SELECT {fn CURRENT_DATE( )};
-- Returns 2007-04-20
SELECT {fn CURRENT_TIME(6)};
-- Returns 10:27:11.973000
DECLARE @date_exp nvarchar(30) = '2007-04-21 01:01:01.1234567';
SELECT {fn DAYNAME( @date_exp )};
-- Returns Saturday
SELECT {fn DAYOFMONTH( @date_exp )};
-- Returns 21
SELECT {fn DAYOFWEEK( @date_exp )};
-- Returns 7
SELECT {fn HOUR( @date_exp)};
-- Returns 1
SELECT {fn MINUTE( @date_exp )};
-- Returns 1
SELECT {fn MONTHNAME( @date_exp )};
-- Returns April
SELECT {fn QUARTER( @date_exp )};
-- Returns 2
SELECT {fn WEEK( @date_exp )};
-- Returns 16