关于sql server:从SQL语句的字段中删除前导零

关于sql server:从SQL语句的字段中删除前导零

Removing leading zeroes from a field in a SQL statement

我正在处理从SQLServer数据库读取以生成提取文件的SQL查询。 从特定字段中删除前导零的要求之一是一个简单的VARCHAR(10)字段。 因此,例如,如果该字段包含" 00001A",则SELECT语句需要将数据返回为" 1A"。

SQL中是否可以通过这种方式轻松删除前导零? 我知道有一个RTRIM函数,但这似乎只能删除空格。


1
SELECT SUBSTRING(ColumnName, patindex('%[^0]%',ColumnName), 10)

1
SELECT REPLACE(ltrim(REPLACE(ColumnName,'0',' ')),' ','0')


我有同样的需求,并使用了这个:

1
2
3
4
5
6
SELECT
    CASE
        WHEN LEFT(COLUMN,1) = '0'
        THEN RIGHT(COLUMN, (len(COLUMN)-1))
        ELSE COLUMN
      END

1
2
3
SELECT SUBSTRING(SUBSTRING('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20),
    patindex('%[^0]%',SUBSTRING('B10000N0Z', patindex('%[0]%','B10000N0Z'),
    20)), 20)

返回N0Z,也就是说,将除去前导零和之前的零。


如果您希望查询返回0而不是零或任何其他值,则可以将其转换为case语句,如下所示:

1
2
3
4
5
SELECT CASE
      WHEN ColumnName = SUBSTRING(ColumnName, patindex('%[^0]%',ColumnName), 10)
       THEN '0'
      ELSE SUBSTRING(ColumnName, patindex('%[^0]%',ColumnName), 10)
      END

您可以使用此:

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


这是从字符串中删除前导零的SQL标量值函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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

您可以尝试一下-需要特别注意的是仅删除前导零:

1
2
3
4
5
6
7
8
9
10
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

或者您可以简单地致电

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

要删除前导0,您可以将数字列乘以1
例如:选择(ColumnName * 1)


你可以试试这个
SELECT REPLACE(columnname,'0','') FROM table


从下个月的声明中删除前导0肯定是可行的。

1
SELECT REPLACE(LEFT(CONVERT(nvarchar,GETDATE(),101),2),'0','')+RIGHT(CONVERT(nvarchar,GETDATE(),101),8)

只需将GETDATE()替换为表格的日期字段即可。


1
SELECT REPLACE(REPLACE(rtrim(REPLACE(REPLACE(REPLACE(REPLACE(ltrim(REPLACE(REPLACE([COLUMN],' ','[Ltrim]'),[Ltrim],' ')),' ',[Ltrim]),'[Ltrim]',' '),' ','[Rtrim]'),[Rtrim],' ')),' ',[Rtrim]),'[Rtrim]',' ') AS RESULT

这是一个Sql脚本,用于模拟2017年之前的tsql中TRIM命令的功能,它与其他建议基本相同,但其他替换为单个仍不常见的字符,[Rtrim]'或'[ Ltrim]'仍可能出现在文本中,但是用唯一的文本替换hat,例如Guid可以解决该问题。

我还没有测试速度


1
2
3
4
5
SELECT CASE
         WHEN TRY_CONVERT(BIGINT,Mtrl_Nbr) = 0
           THEN ''
           ELSE SUBSTRING(Mtrl_Nbr, patindex('%[^0]%',Mtrl_Nbr), 18)
       END

我从上面的想法中借鉴了。这既不快也不优雅。但这是准确的。

案件

1
2
3
4
5
6
7
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

结束


1
2
3
4
5
SELECT ltrim('000045', '0') FROM dual;

LTRIM
-----
45

这应该做。


推荐阅读

    linux命令检清空文件?

    linux命令检清空文件?,系统,不了,名称,环境,文件夹,命令,文件,目录,指令,终

    更新文件命令linux?

    更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,lin

    linux命令删除用户组?

    linux命令删除用户组?,管理,密码,系统,用户组,用户,概念,命令,文件,管理员,

    linux下读取文件命令?

    linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,l

    linux操作数据库命令?

    linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参

    linux改文件夹名命令?

    linux改文件夹名命令?,名字,软件,命令,文件,系统,目录,目标,文件名,源文件,

    linux建文件命令格式?

    linux建文件命令格式?,系统,名字,名称,时间,密码,命令,文件,文件夹,不了,数

    下载文件的命令linux?

    下载文件的命令linux?,平台,工具,服务,密码,软件,网络,位置,代理,手机,工作,

    linux命令文件传输?

    linux命令文件传输?,系统,数据,命令,文件,基本知识,源文件,目录,目标,功能,

    linux文件全选命令?

    linux文件全选命令?,电脑,系统,环境,代码,平台,服务,快捷键,文件,命令,权限,l

    linux浏览文件类命令?

    linux浏览文件类命令?,系统,信息,数据,情况,命令,标准,时间,文件,概念,管理,

    linux打包文件夹命令?

    linux打包文件夹命令?,系统,工具,管理,图片,文件,命令,位置,软件,目录,格式,l

    linux中统计文件命令?

    linux中统计文件命令?,系统,信息,数据,情况,工作,文件,时间,档案,标准,名称,L

    linux导入文件夹命令?

    linux导入文件夹命令?,系统,文件,信息,名称,工作,命令,文件夹,目录,发行,位

    linux重名名文件命令?

    linux重名名文件命令?,图片,名称,名字,文件,命令,位置,代码,软件,系统,文件

    linux删除重复项命令?

    linux删除重复项命令?,数据,系统,工具,电脑,项目,公式,百度,代码,名字,基础,

    linux的建立文件命令?

    linux的建立文件命令?,名称,系统,时间,名字,命令,文件夹,位置,密码,不了,文

    linux06文件命令?

    linux06文件命令?,数字,系统,工作,第一,名字,信息,管理,文件,目录,命令,linux

    linux将文件备份命令?

    linux将文件备份命令?,系统,密码,设备,软件,通讯,较大,认证,服务,数据,文件,L