6
votes

T SQL String conditionnelle Concaténation

avoir une 5 colonnes de données d'adresse. J'ai besoin de concaténer ces champs en une seule adresse avec des espaces entre les valeurs si elles existent. Si la colonne a une valeur nulle, je devrais le sauter et ne pas entrer d'espace.

select 
        case 
            when street_number != '' THEN (cast(street_number as int)) 
        end as street_number,
        case
            when street_ext != '' then
                    case
                        when street_ext = 50 then '1/2'
                    end
        end as street_ext,
        case
            when street_direct ! = '' then street_direct
        end as street_direct,
        case
            when site_street ! = '' then site_street
        end as site_street,
        case
            when site_address ! = '' then site_address
        end as site_address
    from parcel 


1 commentaires

Merci tout le monde pour les réponses rapides, vous gars rock.


5 Réponses :


3
votes

J'ai supposé que vos types de données sont tous Varcharne ou similaires pour la simplicité. Si vous acceptez de supprimer des places doubles, que diriez-vous:

rtrim(ltrim(replace(isnull(street_number) + ' ' 
    + isnull(street_ext) + ' ' 
    + isnull(street_direct) + ' ' 
    + isnull(site_street) + ' ' 
    + isnull(site_address), '  ', ' ')))


0 commentaires

32
votes

Utilisez le "+" pour concaténer des chaînes dans TSQL: xxx

le fonction len renvoie zéro si la valeur de la chaîne est null ou une chaîne de longueur zéro.


1 commentaires

Merci ... Ceci avec seulement quelques modifications fonctionnées parfaitement.



5
votes

Isnulls imbriqués pourrait faire ce dont vous avez besoin. Quelque chose comme: xxx

s'appuyant sur le fait que null + '' = null.


0 commentaires

5
votes

Quelque chose le long des lignes de: xxx


1 commentaires

Cela ne fonctionnera pas. Coalesce (Street_Number + '' ',' ') retournera toujours l'option Street_Number +' 'car elle ne sera jamais nulle en raison de l'espace concaténé à la fin.



1
votes

Tout d'abord, je déclarerais le sépérateur comme une variable, car les clients sont notoires pour les modifier.

Je ferais cela comme suit: P>

, CONCAT
(
    (CASE WHEN LEN(p.street_number) > 0 THEN p.street_number + @AddressSeperator ELSE '' END)
    , (CASE WHEN p.street_ext = 50 THEN '1/2' + @AddressSeperator WHEN LEN(p.street_ext) > 0 THEN p.street_ext + @AddressSeperator ELSE '' END)
    , (CASE WHEN LEN(p.street_direct) > 0 THEN p.street_direct + @AddressSeperator ELSE '' END)
    , (CASE WHEN LEN(p.site_street) > 0 THEN p.site_street + @AddressSeperator ELSE '' END)
    , ISNULL(p.site_address, '')

) AS [full_address]


0 commentaires