2

次のレコードを表す必要があります

DATA
000200AA
00000200AA
000020BCD
00000020BCD
000020ABC

なので

DATA    CNT
200AA   1
20BCD   2
20ABC   2

何か案は?

4

6 に答える 6

8

パトインデックスを使用

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))
于 2012-05-18T15:51:40.320 に答える
3

素敵な再帰的なユーザー定義関数はどうですか?

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)
于 2012-05-18T15:50:52.990 に答える
1

値を取得するために必要なものに応じて、このコードは異なる場合があります。

Barry が提案したように単純な右 5 文字を想定すると、RIGHT(data, 5) と GROUP BY と COUNT を使用して結果を取得できます

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

于 2012-05-18T15:52:12.520 に答える
1
DECLARE @String VARCHAR(32) = N'000200AA'

SELECT  SUBSTRING ( @String ,CHARINDEX(N'2', @String),LEN(@String))
于 2012-05-18T15:52:03.893 に答える
0

STUFF関数を見てみましょう

範囲の文字列にデータを挿入します

于 2012-05-18T15:53:55.093 に答える
0

次のクエリを実行できます。

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)
于 2012-05-18T15:55:06.837 に答える