SQL SERVER 2005 Concatenazione tra campo stringa e valore Null

martedì 20 novembre 2007 - 16.50

gigi90 Profilo | Senior Member

Perche quando concateno un campo varchar e un campo null mi restituisce null?
Come posso far concatenare i due campi considerando quando uno dei due è NULL come un varchar vuoto(stringa '')

Grazie per l'attenzione

alx_81 Profilo | Guru

Ciao!

>Perche quando concateno un campo varchar e un campo null mi restituisce null?
Perchè non è possibile concatenare un null ad una stringa. Se quello che vuoi è una stringa data dal primo varchar più NESSUN CARATTERE dovresti concatenare stringa e '', ovvero il blank, che non è NULL. Null è SCONOSCIUTO, UNKNOWN..

>Come posso far concatenare i due campi considerando quando uno
>dei due è NULL come un varchar vuoto(stringa '')
Ti consiglio di utilizzare la funzione COALESCE per concatenare correttamente i valori:

non sapendo che dbms utilizzi ti allego un esempio in T-SQL (SQL Server):

DECLARE @str as varchar(10) DECLARE @str1 as varchar(5) DECLARE @str2 as varchar(5) SET @str1 = 'HELLO' SET @str2 = NULL SET @str = @str1 + COALESCE(@str1, '') SELECT @str1

qui la guida per la funzione COALESCE
http://msdn2.microsoft.com/En-US/library/ms190349.aspx
>
>Grazie per l'attenzione
di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

gigi90 Profilo | Senior Member

Grazie per la funzione di concatenazione, nella guida di SQL ho cercato di tutto tipo STRCAT o CAT o CONCAT ma NULL-a ah ah

Comunque la concatenaazione nob è sempre NULL: siccome io ho due tabelle con due campi che in base alla relazione delle tabelle concateno, capita che il campo della tabella di sinistra o quella di desrta è NULL e quindi mi restituisce NULL.

Comunque nel frattempo che mi rispondevi ho continuato a cercare ed ho scoperto su un blog giapponese-inglese il seguente comando per SQL Server 2005:

SET CONCAT_NULL_YIELDS_NULL OFF

in pratica lo esegui prima della query e se uno dei campi che si concatenano è null, non lo considera

ESEMPIO:

SELECT 'CIAO' + NULL --Produce come risultato NULL

mentre

SET CONCAT_NULL_YIELDS_NULL OFF
SELECT 'CIAO' + NULL --Produce come risultato CIAO


Il fatto e che nn ho capito che genere di comando è e cosa va ad impostare(basta che funzione) comunque credo che sia qualcosa di specifico per il Transact-SQL e quindi non valido per l'SQL Strandard

alx_81 Profilo | Guru

>Grazie per la funzione di concatenazione, nella guida di SQL
>ho cercato di tutto tipo STRCAT o CAT o CONCAT ma NULL-a ah ah
>Comunque la concatenaazione nob è sempre NULL: siccome io ho
>due tabelle con due campi che in base alla relazione delle tabelle
>concateno, capita che il campo della tabella di sinistra o quella
>di desrta è NULL e quindi mi restituisce NULL.
>Comunque nel frattempo che mi rispondevi ho continuato a cercare
>ed ho scoperto su un blog giapponese-inglese il seguente comando
>per SQL Server 2005:
>
>SET CONCAT_NULL_YIELDS_NULL OFF
>
>in pratica lo esegui prima della query e se uno dei campi che
>si concatenano è null, non lo considera
>
>Il fatto e che nn ho capito che genere di comando è e cosa va
>ad impostare(basta che funzione) comunque credo che sia qualcosa
>di specifico per il Transact-SQL e quindi non valido per l'SQL
>Strandard
Così certo, ottieni quello che vuoi, ma quella è una opzione di sessione e quindi devi specificarla ogni volta che utilizzi una query che potenzialmente può crearti una situazione simile.
Inoltre da MSDN:

"This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature."

In più il codice non è parlante.
Quindi ti consiglio di utilizzare le coalesce ovunque sei costretto a gestire i NULL.
Alx81 =)

http://blogs.dotnethell.it/suxstellino

gigi90 Profilo | Senior Member

Grazie ancora. CIAO
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5