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
5 Réponses :
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), ' ', ' ')))
Utilisez le "+" pour concaténer des chaînes dans TSQL: le fonction len renvoie zéro si la valeur de la chaîne est null ou une chaîne de longueur zéro. p> p>
Merci ... Ceci avec seulement quelques modifications fonctionnées parfaitement.
Isnulls imbriqués pourrait faire ce dont vous avez besoin. Quelque chose comme: s'appuyant sur le fait que null + '' = null. P> p>
Quelque chose le long des lignes de:
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.
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]
Merci tout le monde pour les réponses rapides, vous gars rock.