Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/05/2011, 10h37   #1
Modérateur
 
Avatar de toopac
 
Homme Pac
Consultant informatique
Inscription : juin 2009
Messages : 565
Détails du profil
Informations personnelles :
Nom : Homme Pac
Âge : 25
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2009
Messages : 565
Points : 1 323
Points : 1 323
Par défaut Enlever des 0 en debut de chaîne de caractères

Bonjour,

J'ai deux tables, contenant toutes les deux une référence, et d'autres colonnes.

J'aimerai sélectionner les lignes qui ont les mêmes références dans les deux tables.

Le problème c'est qu'il peut arriver qu'une référence dans une table soit préfixée d'un certain nombre de '0'.
(ex : les références 000012345 et 12345 sont en pratique les mêmes)

J'ai donc pensé à convertir en int les références avant de les comparer, mais il existe d'autres références non numériques elles aussi possiblement préfixées d'un certain nombre de '0'.
(ex : les références 000AG1345 et AG12345 sont en pratique les mêmes)


Avez vous une idée pour enlever les 0 en début de chaîne?
(ou une autre idée pour résoudre mon problème)

Merci d'avance

[edit : je suis sous SQL server 2008 R2]
toopac est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 11h05   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Réaliser une UDF pour ce faire...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE FUNCTION dbo.F_CLEAN_HEADER (@DATA NVARCHAR(256), @CHAR NCHAR(1))
RETURNS NVARCHAR(256)
AS
BEGIN
IF @DATA IS NULL OR @CHAR IS NULL RETURN NULL;
DECLARE @I SMALLINT;
SET @I = 1;
WHILE @I <= LEN(@DATA)
BEGIN
   IF SUBSTRING(@DATA, 1, 1) <> @CHAR RETURN @DATA;
   ELSE
      SET @DATA = SUBSTRING(@DATA, 2, LEN(@DATA) - 1);
   SET @I = @I + 1;
END
RETURN @DATA
END
GO
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 11h20   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour
si les "0 en trop" ne sont que dans une des deux tables (table B dans l'exemple) vous pouvez faire comme ceci

Code SQL :
1
2
3
4
5
 
SELECT *
FROM A
INNER JOIN B
    ON A.reference = RIGHT(B.Reference, LEN(A.reference))

Mais les performances risquent d'être catastrophiques. et vous devriez revoir votre bdd pour utiliser des clefs de type entier.
(un petit nettoyage s'impose )
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 11h21   #4
Modérateur
 
Avatar de toopac
 
Homme Pac
Consultant informatique
Inscription : juin 2009
Messages : 565
Détails du profil
Informations personnelles :
Nom : Homme Pac
Âge : 25
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2009
Messages : 565
Points : 1 323
Points : 1 323
Bonjour, j'ai finalement fait ma propre fonction LTRIM, qui prend un second argument, un peu comme SQLpro viens d'envoyer (pas tout à fait le même code, mais la même idée).

Le soucis c'est que ce n'est pas mes bases, mais celle d'un client, et il tiens à ces 0 ou ses absence de 0 en fonction des cas

Bref, tout fonctionne bien, et les pref restent bonnes.


Merci bien!
toopac est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h08.


 
 
 
 
Partenaires

Hébergement Web