Удаление ведущих нулей из поля в выражении SQL

Я работаю над запросом SQL, который читает из базы данных SQLServer для создания файла извлечения. Одним из требований для удаления начальных нулей из определенного поля является простое поле VARCHAR(10). Так, например, если поле содержит "00001A", инструкция SELECT должна вернуть данные как "1A".

Есть ли способ в SQL, чтобы легко удалить ведущие нули таким образом? Я знаю, что есть функция RTRIM, но это, кажется, только для удаления пробелов.

Ответ 1

select substring(ColumnName, patindex('%[^0]%',ColumnName), 10)

Ответ 2

select replace(ltrim(replace(ColumnName,'0',' ')),' ','0')

Ответ 3

select substring(substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20), 
    patindex('%[^0]%',substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 
    20)), 20)

возвращает N0Z, то есть избавится от начальных нулей и всего, что приходит перед ними.

Ответ 4

У меня была такая же потребность, и я использовал это:

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

Ответ 5

Если вы хотите, чтобы запрос возвращал 0 вместо строки нулей или любого другого значения, вы можете превратить это в регистр case следующим образом:

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

Ответ 6

Вы можете использовать это:

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

Ответ 7

Вы можете попробовать это - требуется особая осторожность, чтобы удалить только начальные нули, если это необходимо:

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

Или вы можете просто позвонить

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

Ответ 8

Чтобы удалить начальный 0, Вы можете умножить числовой столбец на 1 Например: Выбрать (ColumnName * 1)

Ответ 9

Вот функция скалярного значения SQL, которая удаляет начальные нули из строки:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Vikas Patel
-- Create date: 01/31/2019
-- Description: Remove leading zeros from string
-- =============================================
CREATE FUNCTION dbo.funRemoveLeadingZeros 
(
    -- Add the parameters for the function here
    @Input varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @Result varchar(max)

    -- Add the T-SQL statements to compute the return value here
    SET @Result = @Input

    WHILE LEFT(@Result, 1) = '0'
    BEGIN
        SET @Result = SUBSTRING(@Result, 2, LEN(@Result) - 1)
    END

    -- Return the result of the function
    RETURN @Result

END
GO

Ответ 10

Чтобы удалить ведущий 0 из месяца, следующий оператор, определенно будет работать.

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

Просто замените GETDATE() на поле даты вашей таблицы.

Ответ 11

Вы можете попробовать этот SELECT REPLACE(columnname,'0','') FROM table

Ответ 12

select replace(replace(rtrim(replace(replace(replace(replace(ltrim(replace(replace([COLUMN],' ','[Ltrim]'),[Ltrim],' ')),' ',[Ltrim]),'[Ltrim]',' '),' ','[Rtrim]'),[Rtrim],' ')),' ',[Rtrim]),'[Rtrim]',' ') As Result

Это сценарий Sql, который эмулирует функциональность команды TRIM в tsql до 2017 года, он в основном такой же, как и другие рекомендации, но другие заменяются одним необычным символом, который все еще может встречаться, '[Rtrim]' или '[ Ltrim] 'может все еще встречаться в тексте, но замена шляпы уникальным текстом, например, Guid, решит эту проблему.

я не проверял это относительно скорости

Ответ 13

select ltrim('000045', '0') from dual;

LTRIM
-----
45

Это должно быть сделано.

Ответ 14

Я одолжил из вышеизложенных идей. Это не быстро и не элегантно. но это точно.

CASE

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 

END

Ответ 15

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