繁体   English   中英

截断sql server中的前导零

[英]Truncating leading zeros in sql server

我需要代表以下记录

DATA
000200AA
00000200AA
000020BCD
00000020BCD
000020ABC

DATA    CNT
200AA   1
20BCD   2
20ABC   2

有任何想法吗?

使用patindex

select count(test) as cnt,
 substring(test, patindex('%[^0]%',test),len(test)) from (

  select ('000200AA') as test
  union
  select '00000200AA' as test
  union
  select ('000020BCD') as test
  union
  select ('00000020BCD') as test
  union
  select ('000020ABC') as test

  )ty
 group by substring(test, patindex('%[^0]%',test),len(test))

一个漂亮的递归用户定义函数怎么样?

CREATE FUNCTION dbo.StripLeadingZeros (
        @input varchar(MAX)
) RETURNS varchar(MAX)
BEGIN

    IF LEN(@input) = 0
        RETURN @input

    IF SUBSTRING(@input, 1, 1) = '0'
        RETURN dbo.StripLeadingZeros(SUBSTRING(@input, 2, LEN(@input) - 1))

    RETURN @input

END
GO

然后:

SELECT dbo.StripLeadingZeros(DATA) DATA, COUNT(DATA) CNT
FROM YourTable GROUP BY dbo.StripLeadingZeros(DATA)
DECLARE @String VARCHAR(32) = N'000200AA'

SELECT  SUBSTRING ( @String ,CHARINDEX(N'2', @String),LEN(@String))

根据获取值所需的值,此代码可能有所不同:

假设Barry建议使用简单正确的5个字符,您可以使用RIGHT(数据,5)和GROUP BY和COUNT来获得结果

http://sqlfiddle.com/#!3/19ecd/2

看一下STUFF函数

它将数据插入范围的字符串中

您可以执行以下查询:

SELECT RIGHT([DATA],LEN[DATA])-PATINDEX('%[1-9]%',[DATA])+1) [DATA], COUNT(*) CNT
FROM YourTable
GROUP BY RIGHT([DATA],LEN[DATA])-PATINDEX('%[1-9]%',[DATA])+1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM