OVH Cloud OVH Cloud

Décomposer un champ adresse

2 réponses
Avatar
Alain
Bonjour,
j'avais pos=E9 la question il y a quelque temps mais je=20
n'ai toujours pas trouv=E9 la solution.
Je voudrais en SQL qu'=E0 chaque interrogation de ma table=20
(sur chaque select) d=E9composer mon champ adresse en 3=20
champs distincts (ad1, ad2 et ad3) =E0 chaque retour =E0 la=20
ligne.
Je commence avec un truc comme =E7a mais je n'arrive pas =E0=20
continuer :
CASE charindex(CHAR(13)+CHAR(10) , Adr )
WHEN 0 THEN ''
ELSE LEFT( Adr , charindex(CHAR(13)+CHAR(10) ,=20
Adr ) - 1)
END AS Adr1

Si quelqu'un =E0 une id=E9e.

Merci

2 réponses

Avatar
Vuillermet Jacques
Copie-colle cela dans l'Analyseur de requête et exécute.
Si Ok implémente en adaptant.

Merci pour mon petit défi quotidien.

create table #MaTable
(
adresse varchar(8000)
)

INSERT INTO #MaTable (Adresse) VALUES ('1, rue de la Vallée' + CHAR(13) +
CHAR(10) + '2ième ligne' + CHaR(13) + CHaR(10) + 'ligne 3')
INSERT INTO #MaTable (Adresse) VALUES ('56, rue de la Tour' + CHAR(13) +
CHAR(10) + '2ième ligne' + CHaR(13) + CHaR(10) + 'ligne 3 et dernière.')

-- " + 2" car chr()+chr() : 2 caractères

SELECT CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, 1 ) as PositionPremierRC
, CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, 1) + 2
) as PositionDeuxiemeRC
, SUBSTRING(ADRESSE
, 1
, CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, 1
)
) AS ADR1
, SUBSTRING(ADRESSE
, CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, 1 ) + 2
, CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, 1) + 2
)
- CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, 1 )
) AS ADR2
, SUBSTRING(ADRESSE
, CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, 1) + 2
) + 2
, len(adresse ) - CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, CHARINDEX(CHAR(13) + CHAR(10)
, ADRESSE
, 1) + 2
) + 2
) AS ADR3
from #matable

drop table #MaTable

Jacques.

"Alain" a écrit dans le message de
news: b49101c48917$3698c050$
Bonjour,
j'avais posé la question il y a quelque temps mais je
n'ai toujours pas trouvé la solution.
Je voudrais en SQL qu'à chaque interrogation de ma table
(sur chaque select) décomposer mon champ adresse en 3
champs distincts (ad1, ad2 et ad3) à chaque retour à la
ligne.
Je commence avec un truc comme ça mais je n'arrive pas à
continuer :
CASE charindex(CHAR(13)+CHAR(10) , Adr )
WHEN 0 THEN ''
ELSE LEFT( Adr , charindex(CHAR(13)+CHAR(10) ,
Adr ) - 1)
END AS Adr1

Si quelqu'un à une idée.

Merci
Avatar
Fred BROUARD
il ya a mieux :

1) construire ta table avec 3 lignes d'adresse de type VARCHAR(38) normes La
Poste de nom ADR1, ADR2, ADR3
2) ajouter à cette table une colonne de type CHAR(116) en fait 3 * 38 + 2
3) ajouter un trigger sur INSERT et UPDATE qui concatène le contenu des colonnes
ADR1, ADR2, ADR3 avec un blanc de séparation et met le tout dans ADRESSE.

Résumé des opérations :
en maj, lecture, visu tu as les colonnes ADR1, ADR2, ADR3
en recherche tu as la colonne ADRESSE. éventuellement tu peut l'indexer...

A +

Alain a écrit:
Bonjour,
j'avais posé la question il y a quelque temps mais je
n'ai toujours pas trouvé la solution.
Je voudrais en SQL qu'à chaque interrogation de ma table
(sur chaque select) décomposer mon champ adresse en 3
champs distincts (ad1, ad2 et ad3) à chaque retour à la
ligne.
Je commence avec un truc comme ça mais je n'arrive pas à
continuer :
CASE charindex(CHAR(13)+CHAR(10) , Adr )
WHEN 0 THEN ''
ELSE LEFT( Adr , charindex(CHAR(13)+CHAR(10) ,
Adr ) - 1)
END AS Adr1

Si quelqu'un à une idée.

Merci




--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************