2017-05-08 1 views
3

Je souhaite supprimer les zéros en tête de la table SQL. Je joins la colonne 3 en tant que colonne. exempleComment supprimer le ou les zéro (s) en tête de SQL

col1   col2  col3 
00000  S   Gaskin Road 
      N   Broad Street 
00001     John Rolfe Road 

ce que je veux que le résultat soit:

1 0 S Gaskin Road or just S Gaskin Road 
2 N Broad Street 
3 1 John Rolfe Road 

ici est le script que je joins 3 colonne

,COALESCE(CASE WHEN col1 = '' THEN '' ELSE col1 + ' ' END, '') + 
    COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
    COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '') as allCol 
+0

Quelle est la type de données de votre 'col1'? – DigiFriend

+0

Pouvez-vous juste le convertir en int? Les nombres n'ont pas de zéros en tête. –

+0

col1 (nvarchar (255), null) – john

Répondre

1

cast col1 à int si les zéros non significatifs sont enlevés et cast le int à varchar pour concaténation.

COALESCE(CASE WHEN col1 = '' THEN '' ELSE cast(cast(col1 as int) as varchar(255))+ ' ' END, '') + 
COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '') 
+0

Merci vkp cela a fonctionné :-) – john

+0

@john. . . Cela fonctionne * en supposant * que 'col1' est toujours un nombre. D'après mon expérience avec les numéros de maison, ce n'est pas une hypothèse sûre. –

1

Une méthode utilise patindex(). Ma première pensée sur la façon d'écrire c'est:

((case when col1 is null or col1 = '' or col1 = '000000' then '' 
     else substring(col1, patindex('%[^0]%', col1), 6) + ' ' 
    end) + 
    (case when col2 is null or col2 = '' then '' 
     else col2 + ' ' 
    end) + 
    (case when col3 is null or col3 = '' then '' 
     else col3 
    end) 
    ) as allcol 

Si vous avez besoin déjà d'utiliser case, je ne vois pas un avantage pour le mélange dans coalesce().

1

Vous pouvez définir votre propre fonction pour supprimer tous les zéros:

CREATE FUNCTION RemoveLeadingZeros(@value varchar(255)) RETURNS varchar(255) 
AS 
BEGIN 
    while substring(@value, 1, 1) = '0' and datalength(@value) > 1 
    begin 
    set @value = substring(@value, 2, 255) 
    end 

    return @value; 
END 
GO 

Ainsi, la concaténation de vos 3 champs va maintenant être:

,COALESCE(CASE WHEN col1 = '' THEN '' ELSE dbo.RemoveLeadingZeros(col1) + ' ' END, '') + 
COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '') as allCol 
0
COALESCE(CASE WHEN col1 = '' THEN '' ELSE SUBSTRING(col1, PATINDEX('%[^0]%', col1+'.'), LEN(col1))+ ' ' END, '') + 
COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '')