quitar - Eliminar ceros a la izquierda de un campo en una declaración de SQL
quitar los ceros en sql server (13)
Estoy trabajando en una consulta SQL que se lee desde una base de datos SQLServer para producir un archivo de extracción. Uno de los requisitos para eliminar los ceros a la izquierda de un campo particular, que es un campo VARCHAR(10)
simple. Entonces, por ejemplo, si el campo contiene ''00001A'', la instrucción SELECT necesita devolver los datos como ''1A''.
¿Hay alguna forma en SQL para eliminar fácilmente los ceros a la izquierda de esta manera? Sé que hay una función RTRIM
, pero esto solo parece eliminar espacios.
Para eliminar el 0 inicial , puede multiplicar la columna numérica con 1 Ej .: Seleccionar (Nombre de columna * 1)
Para eliminar el 0 principal del siguiente mes sin duda, la declaración funcionará.
SELECT replace(left(Convert(nvarchar,GETDATE(),101),2),''0'','''')+RIGHT(Convert(nvarchar,GETDATE(),101),8)
Simplemente GETDATE()
con el campo de fecha de su tabla.
Puedes probar esto: se requiere especial cuidado para eliminar solo ceros a la izquierda si es necesario:
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
O simplemente puede llamar
CAST(CAST(@LeadingZeros AS INT) AS VARCHAR(10))
Puedes usar esto:
SELECT REPLACE(LTRIM(REPLACE(''000010A'', ''0'', '' '')),'' '', ''0'')
Si desea que la consulta devuelva un 0 en lugar de una cadena de ceros o cualquier otro valor, puede convertir esto en una declaración de caso como esta:
select CASE
WHEN ColumnName = substring(ColumnName, patindex(''%[^0]%'',ColumnName), 10)
THEN ''0''
ELSE substring(ColumnName, patindex(''%[^0]%'',ColumnName), 10)
END
Tenía la misma necesidad y usé esto:
select
case
when left(column,1) = ''0''
then right(column, (len(column)-1))
else column
end
Tomé prestado de las ideas anteriores. Esto no es ni rápido ni elegante. pero es exacto
CASO
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
puedes probar esto SELECT REPLACE(columnname,''0'','''') FROM table
select CASE
WHEN TRY_CONVERT(bigint,Mtrl_Nbr) = 0
THEN ''''
ELSE substring(Mtrl_Nbr, patindex(''%[^0]%'',Mtrl_Nbr), 18)
END
select ltrim(''000045'', ''0'') from dual;
LTRIM
-----
45
Esto debería hacer.
select replace(ltrim(replace(ColumnName,''0'','' '')),'' '',''0'')
select substring(ColumnName, patindex(''%[^0]%'',ColumnName), 10)
select substring(substring(''B10000N0Z'', patindex(''%[0]%'',''B10000N0Z''), 20),
patindex(''%[^0]%'',substring(''B10000N0Z'', patindex(''%[0]%'',''B10000N0Z''),
20)), 20)
devuelve N0Z
, es decir, se deshará de los ceros a la izquierda y cualquier cosa que venga antes que ellos.