Suppression des zéros non significatifs d’un champ dans une instruction SQL

Je travaille sur une requête SQL qui lit dans une firebase database SQLServer pour produire un fichier d’extraction. Une des exigences pour supprimer les zéros en tête d’un champ particulier, qui est un simple champ VARCHAR(10) . Ainsi, par exemple, si le champ contient «00001A», l’instruction SELECT doit renvoyer les données sous la forme «1A».

Existe-t-il un moyen de supprimer facilement les zéros en tête dans SQL? Je sais qu’il existe une fonction RTRIM , mais cela ne semble supprimer que des espaces.

 select subssortingng(ColumnName, patindex('%[^0]%',ColumnName), 10) 
 select replace(lsortingm(replace(ColumnName,'0',' ')),' ','0') 
 select subssortingng(subssortingng('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20), patindex('%[^0]%',subssortingng('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20)), 20) 

renvoie N0Z , c’est-à-dire qu’il éliminera les zéros en tête et tout ce qui les précède.

J’ai eu le même besoin et utilisé ceci:

 select case when left(column,1) = '0' then right(column, (len(column)-1)) else column end 

Si vous souhaitez que la requête renvoie un 0 au lieu d’une chaîne de zéros ou toute autre valeur, vous pouvez en faire une déclaration de cas comme ceci:

 select CASE WHEN ColumnName = subssortingng(ColumnName, patindex('%[^0]%',ColumnName), 10) THEN '0' ELSE subssortingng(ColumnName, patindex('%[^0]%',ColumnName), 10) END 

Vous pouvez utiliser ceci:

 SELECT REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '0') 

Vous pouvez essayer ceci: il faut prendre soin de ne supprimer que les zéros en tête si nécessaire:

 DECLARE @LeadingZeros VARCHAR(10) ='-000987000' SET @LeadingZeros = CASE WHEN PATINDEX('%-0', @LeadingZeros) = 1 THEN @LeadingZeros ELSE CAST(CAST(@LeadingZeros AS INT) AS VARCHAR(10)) END SELECT @LeadingZeros 

Ou vous pouvez simplement appeler

 CAST(CAST(@LeadingZeros AS INT) AS VARCHAR(10)) 

Pour supprimer un 0, vous pouvez multiplier la colonne numéro par 1 Par exemple: Select (ColumnName * 1)

Pour supprimer le premier 0 de la déclaration du mois suivant, cela fonctionnera certainement.

 SELECT replace(left(Convert(nvarchar,GETDATE(),101),2),'0','')+RIGHT(Convert(nvarchar,GETDATE(),101),8) 

Remplacez simplement GETDATE() par le champ de date de votre table.

vous pouvez essayer cette SELECT REPLACE(columnname,'0','') FROM table

 select lsortingm('000045', '0') from dual; LTRIM ----- 45 

Cela devrait faire.

J’ai emprunté aux idées ci-dessus. Ce n’est ni rapide ni élégant. mais c’est exact.

CAS

 WHEN left(column, 3) = '000' THEN right(column, (len(column)-3)) WHEN left(column, 2) = '00' THEN right(a.column, (len(column)-2)) WHEN left(column, 1) = '0' THEN right(a.column, (len(column)-1)) ELSE 

FIN

 select CASE WHEN TRY_CONVERT(bigint,Mtrl_Nbr) = 0 THEN '' ELSE subssortingng(Mtrl_Nbr, patindex('%[^0]%',Mtrl_Nbr), 18) END