0

index特定の値に対して特定の数のを見つける方法

たとえば、私の番号が1001

1001 Ieで両方の現在のインデックスが必要です。14

を使用していますが、これで firstcharindexしか取得できません。charindex1

4

2 に答える 2

0
Declare @String VARCHAR(10) = '1001'

SELECT CHARINDEX('1', @String)  AS FirstOne
      ,CHARINDEX('1', @String, CHARINDEX('1', @String)+1) NextOne

結果

FirstOne  NextOne
   1         4

CHARINDEX には、オプションの第 3 パラメーター [開始インデックス] があります。

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

または、このようなことができます....

Declare @String VARCHAR(10) = '110101'


DECLARE @Table TABLE ([Char] CHAR(1), [INDEX] INT)      
DECLARE @ChartoSearch CHAR(1) = '1'      
DECLARE @i INT = 0      

WHILE (LEN(@String) >= @i)
BEGIN
     INSERT INTO @Table ([Char], [INDEX])
     SELECT @ChartoSearch,CHARINDEX(@ChartoSearch, @String, @i)
     SET @i = @i + 1;
END

SELECT DISTINCT * FROM @Table

結果セット

╔══════╦═══════╗
║ Char ║ INDEX ║
╠══════╬═══════╣
║    1 ║     1 ║
║    1 ║     2 ║
║    1 ║     4 ║
║    1 ║     6 ║
╚══════╩═══════╝
于 2014-01-29T12:17:13.813 に答える
0

case数字が 4 桁しかない場合は、明示的なステートメントを提案します。

select (case when number = '0000' then 0
             when number = '0001' then 1
             when number = '0010' then 1
             when number = '0011' then 2
             when number = '0100' then 1
             when number = '0101' then 2
             when number = '0110' then 2
             when number = '0111' then 3
             when number = '1000' then 1
             when number = '1001' then 2
             when number = '1010' then 2
             when number = '1011' then 3
             when number = '1100' then 2
             when number = '1101' then 3
             when number = '1110' then 3
             when number = '1111' then 4
      end) as NumOnes

または、次のように計算します。

select ((case when number like '1%' then 1 else 0 end) +
        (case when number like '_1%' then 1 else 0 end) +
        (case when number like '__1%' then 1 else 0 end) +
        (case when number like '___1%' then 1 else 0 end)
       ) as NumOnes

数値に対して次の操作を数値として実行することもできます。

select ((case when number & 1 > 0 then 1 else 0 end) +
        (case when number & 2 > 0 then 1 else 0 end) +
        (case when number & 4 > 0 then 1 else 0 end) +
        (case when number & 8 > 0 then 1 else 0 end)
       ) as NumOnes
于 2014-01-29T14:46:24.140 に答える