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