2015-02-16 3 views
0

Учитывая переменную, содержащую ряд из 0 и 1, как я могу подсчитать количество каждого в переменной?Как я могу подсчитать количество 0 и 1 в переменной?

Вот пример:

SET @AnswerGridCorrect = '0010010'; 

Что мне нужно сделать, чтобы вернуть комментарий в переменную под названием @Hint таким образом, что она будет содержать:

"Select 2 out of 7 choices" 
+1

возможно дубликат [Как вы можете найти количество вхождений конкретного символ в строке с использованием sql?] (http://stackoverflow.com/questions/287373/how-can-you-find-the-number-of-occurrences-of-a-particu лар-символьный-в строке) – CodingIntrigue

ответ

2

Используйте это:

DECLARE @AnswerGridCorrect VARCHAR(MAX) 
DECLARE @Question VARCHAR(MAX) 

SET @AnswerGridCorrect = '0010010'; 

SET @question = 'Select ' + CAST(LEN(@AnswerGridCorrect) - LEN(REPLACE(@AnswerGridCorrect, '1', '')) AS VARCHAR(MAX)) + 
       ' out of ' + CAST(LEN(@AnswerGridCorrect) AS VARCHAR(MAX)) + ' choices' 

SELECT @Question 

Выход:

Select 2 out of 7 choices

1

Вам нужно перебрать каждое положение и испытание, если оно является 0 или 1. Например:

while i <= 7 begin 
    if substr(@AnswerGridCorrect,i,1) == 1 
     set count = count + 1 
    set i = i + 1 
end 

Примечание выше, является неполным exampl но это должно дать вам представление.

Также см https://msdn.microsoft.com/en-us/library/ms187748.aspx

0

Поскольку у вас есть только 0 и 1-х это довольно легко выполнимы:

Наилучшим решением было бы использовать побитовое И (что-то вдоль линий)

public bool CheckBit(byte b, int bitNumber) 
    { 
     var bit = (b & (1 << bitNumber - 1)) != 0; 
     return bit; 
    } 

Если вы передаете все 0 и 1 по одному (в качестве bitNumber), здесь вы можете подсчитать, сколько вернет true (если оба равны 1) и сколько возвращается false (если число прошло 0) и даже выяснить, какой из них установлен в 0 и какие из них установлены в 1.

Надеется, что это помогает :)

Смежные вопросы