Rechercher : dans
Par :

Concatener 3 champs en 1 en SQL

Dernière réponse le 21 déc 2007 à 10:53:13 DarkShadow2000, le 8 déc 2007 à 15:48:11 
 Signaler ce message aux modérateurs

Bonjour,
voila mon probleme

dans une base de données SQL
j'ai une table1 dans laquelle j'ai trois champs :

C2#1 char(255),
C2#2 char(1),
C2#3 char(1)

et je voudrais dans une table1bis avoir un seul champ C2 char(257)

Configuration: Windows XP
Firefox 2.0.0.11

Meilleures réponses pour « concatener 3 champs en 1 en SQL » dans :

1

phil_232, le 9 déc 2007 à 13:36:58

En sQL Server :
SELECT C1 + C2 + C3

Répondre à phil_232

2

DarkShadow2000, le 9 déc 2007 à 18:25:12

En fait, je voudrais plus un truc du genre :

UPDATE table1bis SET c2 = (SELECT (c2#1+c2#2+c2#3) from table1)

mais qui fonctionne!

Répondre à DarkShadow2000

3

phil_232, le 9 déc 2007 à 22:54:45
  • +2

C2#3 ??? tu crois que c'est permis comme nom de variable ?

Répondre à phil_232

4

DarkShadow2000, le 10 déc 2007 à 17:33:29

Je sais qu'il faut eviter les caracteres speciaux
mais en l'occurence il s'agit de nom de colonne qui existe.

enfin, je suis peut etre sur la voie, par le biais d'un curseur, mais la concatenation pose
quelques problemes avec les champs de type char.

Répondre à DarkShadow2000

5

phil232, le 10 déc 2007 à 18:08:32

Normalement une concat est une opération vraiement de base. mais c'est quel bdd ? peut tu faire

SELECT ([c2#1] + [c2#2] + [c2#3]) from table1

ou bien quel est le pb avec la concat ?

Répondre à phil232

6

DarkShadow2000, le 13 déc 2007 à 17:38:42

En fait j'ai fait comme ca.
Ca marche, juste un tout petit probleme le dernier enregistrements est copié deux fois!

CREATE proc migration
as

declare @var1 char(255)
declare @var2 char(1)
declare @var3 char(1)
declare @var varchar(257)
declare @varc1 varchar(2)
declare @varc3 int

set nocount on

declare curs1 cursor
for select c1,c2#1,c2#2,c2#3,c3
from table1

open curs1

fetch curs1
into @varc1, @var1, @var2, @var3, @varc3

select @var = convert(varchar(255),@var1) + convert(varchar(1),@var2) + convert(varchar(1),@var3)

insert into table1bis(c1,c2,c3)
values (@varc1, @var, @varc3)

while @@fetch_status = 0
begin
fetch curs1
into @varc1, @var1, @var2, @var3, @varc3

select @var = @var1 + @var2 + @var3
print @var
insert into table1bis(c1,c2,c3)
values (@varc1, @var, @varc3)
end

close curs1

deallocate curs1

set nocount on
GO

Répondre à DarkShadow2000

7

phil232, le 13 déc 2007 à 17:48:48

Ca m'a fait rire :

declare @var1 char(255)
declare @var2 char(1)
declare @var3 char(1)
select @var = convert(varchar(255),@var1) + convert(varchar(1),@var2) + convert(varchar(1),@var3)

Pourquoi tu n'utilises pas toute de suite le bon type ???

Et puis : varchar(1) quelle est la différence par rapport à char(1) ???

Et puis : @varc3 j'espère que ces noms ont été choisi pour obfusquer le code et en réalité tu utilises des choses lisibles. :)

fetch curs1 into @varc1, @var1, @var2, @var3, @varc3
...
while @@fetch_status = 0
begin

select @var = @var1 + @var2 + @var3
print @var
insert into table1bis(c1,c2,c3)
values (@varc1, @var, @varc3)
fetch curs1 into @varc1, @var1, @var2, @var3, @varc3
end

Répondre à phil232

8

DarkShadow2000, le 13 déc 2007 à 18:35:01

Bon, c'est vrai j'avoue je me suis pas trop foulé pour faire ca.
autant sur les noms des variables, que sur la construction de la
procedure.
en tout cas j'ai reussi a faire marrer quelqu'un avec du SQL, c'est deja pas mal.
et puis comme en ce moment je suis sur AS400, me suis laché un peu au niveau rigueur.

Répondre à DarkShadow2000

9

phil232, le 13 déc 2007 à 18:37:42

Lol

sinon la boucle ça marche ?

Répondre à phil232

10

DarkShadow2000, le 13 déc 2007 à 19:06:36

Ca oui.
le transact m'a fait douté, lorsque je verifier avec un select, il ne m'afficher pas le caractere 257 en colonne 2.
alors que dans la table tout etait bien present.

Répondre à DarkShadow2000

11

phil232, le 14 déc 2007 à 09:47:58

Hmmm, attention tu declare @var1 comme char(255) et après tu mets ça dans un varchar(257). Si c2#1 ne contient pas 255 caractères un TRIM est applique lors de la conversion en varchar et donc les positions ne sont plus les mêmes. sinon tu dois rester avec un char(257).

Répondre à phil232

12

DarkShadow2000, le 14 déc 2007 à 17:01:55

Exact, ceci dit, j'avais la trame principale a realiser pour un pote, qui se chargera maintnant de fignoler le travail.

Pour parler d'autre chose, connaitrais-tu par hasard, un bon simulateur d'AS400?

je ne devrais pas le dire, mais j'aimerais bien en faire un peu a la maison (je dois etre mazo !).

Répondre à DarkShadow2000

13

phil232, le 14 déc 2007 à 17:08:10

Là je dois demander à qqun. Mais ça va être du style VMWare je crains. bonne idée d'ailleurs. ils utilisent un langage de prog aussi. semble être la peine de l'apprendre. j'ai entendu qu'aux USA on peut faire de l'ordre de $150/heure, oufdi.

Répondre à phil232

14

DarkShadow2000, le 20 déc 2007 à 20:07:38

Alors, des nouvelles ?

Répondre à DarkShadow2000

15

 phil232, le 21 déc 2007 à 10:53:13

Oups, j'ai oublié. ce qu'ici au travail je ne connais personne c'est à la maison que je dois demander.

Répondre à phil232