Я работаю над запросом 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