Удаление ведущих нулей из поля в инструкции SQL


Я работаю над SQL-запросом, который читает из базы данных SQLServer для создания файла извлечения. Одно из требований для удаления ведущих нулей из конкретного поля, которое является простым

13 80

13 ответов:

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

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

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

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

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

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

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

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

вы можете попробовать это - он принимает особую осторожность только при необходимости удалите ведущие нули:

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)) 

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

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

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

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

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

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

LTRIM
-----
45

Это следует делать.

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

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 

конец

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