--個數好求
select len(replace('0101000000000000000000000000000000000000','0',''))
/*----------- 
2(影響 1 個資料列)*/

解决方案 »

  1.   

    declare @sql varchar(50)
    set @sql='1000000000000000000000000000000000000000'
    select charindex('1',@sql)
      

  2.   


    Create table Song (id int, song nvarchar(20), singer nvarchar(20), songtype varchar(40))
    insert into Song
                   select 1  ,   N' 野人的士高'         ,   N'未知' ,               '1000000000000000000000000000000000000000' 
    union all select 2,     N'光阴的故事'     ,     N'罗大佑'     ,         '0101000000000000000000000000000000000000' 
    union all select 3,     N'小酒窝'            ,  N'林俊杰'          ,    '0001000000000000000000000000000000000000' 
    union all select 4,     N' 我是小沈阳(DJ)',      N'小沈阳'  ,            '1001000000000000000000000000000000000000' --Type
    SELECT
        ID,song,singer, B.number as songtype
        
    FROM  Song  as  A
        JOIN master.dbo.spt_values AS B
            ON B.type='p' AND B.number BETWEEN 1 AND 40
                AND SUBSTRING(A.songtype,B.number,1)='1'
    /*
    ID          song                 singer               songtype    
    ----------- -------------------- -------------------- ----------- 
    1            野人的士高               未知                   1
    2           光阴的故事                罗大佑                  2
    2           光阴的故事                罗大佑                  4
    3           小酒窝                  林俊杰                  4
    4            我是小沈阳(DJ)           小沈阳                  1
    4            我是小沈阳(DJ)           小沈阳                  4
    */--Type個數
    select ID,song,singer,
    len(replace(songtype,'0','')) as cnt 
    from Song
    /*
    ID          song                 singer               cnt         
    ----------- -------------------- -------------------- ----------- 
    1            野人的士高               未知                   1
    2           光阴的故事                罗大佑                  2
    3           小酒窝                  林俊杰                  1
    4            我是小沈阳(DJ)           小沈阳                  2
    */drop table song
      

  3.   


    既然songtype都设计成这样了,
    何必更直接的 用表1的id直接表示呢? ID      Song            singer             SongType 
    1      野人的士高            未知                1 
    2      光阴的故事          罗大佑                2,4
    3      小酒窝              林俊杰                4
    4      我是小沈阳(DJ)      小沈阳               1,4
      

  4.   


    select charindex('1','0101000000000000000000000000000000000000') as 第一個1的位置,
           charindex('1', stuff('0101000000000000000000000000000000000000',charindex('1','0101000000000000000000000000000000000000'),1,'2'))  as 第二個1的位置 -------------------------------
    2         4
      

  5.   

    CREATE TABLE TA(ID INT, text NVARCHAR(5),  text2 NVARCHAR(5), text3 NVARCHAR(10))
    INSERT TA
    SELECT 1,  N'的士高',  N'的士高',  'Disco' UNION ALL 
    SELECT 2,  N'励志',  N'励志',  'Encourage' UNION ALL 
    SELECT 3,  N'舞曲',  N'舞曲',  'Dance' UNION ALL 
    SELECT 4,  N'流行',  N'流行',  'POPmusic'
    GOCREATE TABLE TB(ID INT, Song NVARCHAR(10),  singer NVARCHAR(5), SongType NVARCHAR(40))
    INSERT TB
    SELECT 1,  N'野人的士高',  N'未知',  '1000000000000000000000000000000000000000' UNION ALL 
    SELECT 2,  N'光阴的故事',  N'罗大佑',  '0101000000000000000000000000000000000000' UNION ALL 
    SELECT 3,  N'小酒窝',  N'林俊杰',  '0001000000000000000000000000000000000000' UNION ALL 
    SELECT 4,  N'我是小沈阳(DJ)',  N'小沈阳',  '1001000000000000000000000000000000000000'
    GOCREATE FUNCTION F_COMBINESTR(@ID INT)
    RETURNS NVARCHAR(50)
    AS 
    BEGIN
      DECLARE  @SQL NVARCHAR(50)
      SET @SQL=N';'
      SELECT @SQL=@SQL+N';' + text FROM TC WHERE BID=@ID
      RETURN STUFF(@SQL, 1, 2, N'')
    END
    GOCREATE TABLE TC(ID INT, text NVARCHAR(5),  text2 NVARCHAR(5), text3 NVARCHAR(10),BID int,Song NVARCHAR(10),  singer NVARCHAR(5))
    GOINSERT TC
    SELECT A.ID,text,text2,text3,
           B.ID AS BID,B.Song,B.singer
    FROM TA A, TB B
    WHERE CHARINDEX('1', SongType, A.ID)=A.IDSELECT BID,Song,singer,dbo.F_COMBINESTR(BID) AS SongType
    FROM TC
    GROUP BY BID,Song,singer
    DROP TABLE TA,TB,TC
    DROP FUNCTION F_COMBINESTR
    /*
    BID         Song       singer SongType
    ----------- ---------- ------ --------------------------------------------------
    1           野人的士高      未知     的士高
    2           光阴的故事      罗大佑    励志;流行
    3           小酒窝        林俊杰    流行
    4           我是小沈阳(DJ)  小沈阳    的士高;流行*/
      

  6.   

    楼上好厉害INSERT TC
    SELECT A.ID,A.text,A.text2,A.text3,
           B.ID AS BID,B.Song,B.singer
    FROM TA A, TB B
    WHERE CHARINDEX('1', SongType, A.ID)=A.ID