index
特定の値に対して特定の数のを見つける方法
たとえば、私の番号が1001
1001
Ieで両方の現在のインデックスが必要です。1
と4
を使用していますが、これで firstcharindex
しか取得できません。charindex
1
index
特定の値に対して特定の数のを見つける方法
たとえば、私の番号が1001
1001
Ieで両方の現在のインデックスが必要です。1
と4
を使用していますが、これで firstcharindex
しか取得できません。charindex
1
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 ║
╚══════╩═══════╝
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