나는이 2 열이있는 테이블 :쉼표로 구분 된 열에서 비트 연산을 수행하는 방법은 무엇입니까?
ID (INT) (PK) NumList (VARCHAR)
1 2,4,25
2 2,12,25,33
3 3,10
이 어떻게의이 테이블에 열을 추가하고 또는 적용을 가정 해 봅시다 것 | 목록에있는 번호에 연산자를()?
ID NewCol
1 31
2 63
3 11
나는이 2 열이있는 테이블 :쉼표로 구분 된 열에서 비트 연산을 수행하는 방법은 무엇입니까?
ID (INT) (PK) NumList (VARCHAR)
1 2,4,25
2 2,12,25,33
3 3,10
이 어떻게의이 테이블에 열을 추가하고 또는 적용을 가정 해 봅시다 것 | 목록에있는 번호에 연산자를()?
ID NewCol
1 31
2 63
3 11
create table tbl (
ID int,
NumList VARCHAR(100));
insert tbl select
1, '2,4,25' union all select
2, '2,12,25,33' union all select
3, '3,10';
select t.ID, t.NumList, sum(distinct power(2,v.number)) newcol
from tbl T
outer apply (values (cast('<a>'+REPLACE(NumList,',','</a><a>')+'</a>' as xml))) X(xml)
outer apply X.xml.nodes('/a') N(Num)
left join master..spt_values v on v.type='P' and v.number between 0 and 30
and power(2,v.number) & N.Num.value('.','bigint') > 0
group by t.ID, t.NumList
order by t.ID
=== results
ID NumList newcol
---- ------------ -----------
1 2,4,25 31
2 2,12,25,33 63
3 3,10 11
당신은 새 열을 추가, 당신은 아마 NumList가 변경 될 때마다 삽입 또는 업데이트에 새 열을 계산을하고 채우는 트리거를 작성해야 할 것입니다. 트리거는 NumList에서 숫자를 파싱해야하고 계산을 수행 한 다음 결과를 새 열에 넣어야합니다.
은 (당신을 보이더라도 이미 연산자를 사용하는 방법을 알고, 그냥 열을 채우는 방법을 궁금해?) T-SQL에서 비트 연산자에 대한 설명은 아래 링크를 참조
NewCol (표시된)의 값은 NumList와 어떤 관련이 있습니까? – RichardTheKiwi
@RichardTheKiwi, 비트 단위 또는 numlist의 값 3 | 10 = 11, 매우 화가났습니다. –
다중 값을 분할하여 조작 할 수 있다면 이것을 살펴보십시오. http://stackoverflow.com/questions/314824/t-sql-opposite-to-string-concatenation-how-to-split-string-into-multiple-reco –