Se hai mai provato a concatenare una stringa con un numero durante l'utilizzo di SQL Server, ma hai ricevuto un errore, questo articolo dovrebbe chiarirti le cose. Esiste più di un modo per eseguire la concatenazione utilizzando T-SQL in SQL Server e se stai concatenando tipi di dati diversi (come una stringa e un numero), potresti ricevere un errore, a seconda di come esegui la concatenazione.
La cosa da ricordare quando si concatenano diversi tipi di dati è che devono prima essere convertiti nello stesso tipo di dati. Più specificamente, quando si concatena una stringa con un numero, il numero dovrà essere convertito in una stringa prima che possa essere concatenato con la stringa. Fortunatamente SQL Server/T-SQL lo rende un gioco da ragazzi.
Questo articolo presenta sei modi per concatenare stringhe con numeri usando T-SQL.
La funzione CONCAT()
Il modo più ovvio (e forse il migliore) per concatenare una stringa e un numero è usare CONCAT()
funzione. Ciò consente di fornire la stringa e il numero come due argomenti separati. SQL Server li concatenerà e la concatenazione sarà completa.
Esempio
SELECT CONCAT('Comments: ', 9) AS Result;
Risultato:
Result ----------- Comments: 9
Come puoi vedere, funziona perfettamente. La stringa e il numero vengono presentati come un campo.
Nota che non sei limitato a una sola stringa e un numero:il CONCAT()
la funzione può accettare fino a 254 argomenti (cioè puoi unire fino a 254 stringhe/numeri insieme.
Nota anche che CONCAT()
converte implicitamente tutti gli argomenti in tipi stringa prima della concatenazione. Inoltre, CONCAT()
converte implicitamente qualsiasi valore nullo in stringhe vuote.
La funzione CONCAT_WS()
Possiamo fare un ulteriore passo avanti nell'esempio precedente usando CONCAT_WS()
funzione. Questa funzione consente di specificare un separatore.
Per fornire un separatore, aggiungilo semplicemente come primo argomento. Quindi specifica la stringa e il numero come secondo e terzo argomento.
SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;
Risultato:
Result ----------- Comments: 9
Nota che questa funzione non è necessariamente adatta per separare le coppie nome/valore, poiché il separatore viene aggiunto tra ogni singolo elemento concatenato (quindi verrà aggiunto anche tra ogni coppia nel caso in cui tu abbia più coppie). Nel nostro caso funziona bene, perché abbiamo solo una coppia nome/valore da concatenare.
Tuttavia, puoi sempre nidificare più CONCAT_WS()
funzioni per restituire la concatenazione corretta per le tue esigenze (in modo da poter avere un separatore diverso tra ogni coppia).
La funzione CONVERT()
Se per qualche motivo non puoi (o non vuoi) utilizzare il CONCAT()
o CONCAT_WS()
funzioni, è possibile eseguire una concatenazione utilizzando l'operatore di concatenazione di stringhe (+
). Quando utilizzi questo metodo, dovrai eseguire manualmente le conversioni dei tipi di dati.
Un modo per convertire tra tipi di dati è utilizzare CONVERT()
funzione.
Ecco come faresti utilizzando gli stessi dati degli esempi precedenti:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Risultato:
Result ----------- Comments: 9
In questo caso converto il numero intero in varchar(12), ma questo può essere qualsiasi tipo di dati e lunghezza richiesta.
La funzione CAST()
Il CAST()
la funzione è molto simile a CONVERT()
funzione. La differenza principale è che CAST()
è ANSI standard e CONVERT()
è specifico di T-SQL. Detto questo, CONVERT()
ha alcune funzionalità extra, ma per gli scopi di questi esempi, potresti usarne una.
Ecco il CAST()
versione utilizzando gli stessi dati degli esempi precedenti:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Risultato:
Result ----------- Comments: 9
La funzione TRY_CONVERT()
Un potenziale problema quando si utilizza CONVERT()
la funzione è che, se la conversione non riesce, riceverai un errore. Mentre questo va bene in molti casi, in alcuni casi questo potrebbe non essere desiderabile. In questi casi, potresti trovare TRY_CONVERT()
più adatto.
Il TRY_CONVERT()
La funzione converte il tipo di dati proprio come CONVERT()
funzione fa. Tuttavia, se i dati non possono essere convertiti, restituiranno null
.
Ad esempio, se proviamo a fare quanto segue, otteniamo un errore:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Risultato:
Error: Arithmetic overflow error converting numeric to data type varchar.
Tuttavia, se utilizziamo TRY_CONVERT()
, otteniamo null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Risultato:
Result ------ null
È possibile utilizzare la programmazione condizionale in questo caso per eseguire un'attività diversa a seconda del risultato.
La funzione TRY_CAST()
Il TRY_CAST()
la funzione funziona allo stesso modo. Converte il tipo di dati proprio come CAST()
la funzione lo fa e, se i dati non possono essere convertiti, restituirà null
.
Ad esempio, questo genera un errore:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Risultato:
Error: Arithmetic overflow error converting numeric to data type varchar.
Ma se usiamo TRY_CAST()
invece, otteniamo null
:
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Risultato:
Result ------ null