--個數好求
select len(replace('0101000000000000000000000000000000000000','0',''))
/*-----------
2(影響 1 個資料列)*/
select len(replace('0101000000000000000000000000000000000000','0',''))
/*-----------
2(影響 1 個資料列)*/
解决方案 »
- 数据库触发器、过程如何进行单元测试???
- 求条语句
- 【TSQL】挑战5
- 存储过程返回一条记录
- 怎样接收返回 主键的值。。。?
- sqlserver2008中怎样对结果再次筛选
- 有关数据插入的问题(在线等)
- SQL 2000 还原时报错,错误信息如下,请指教!!!
- 一个日期跟系统日期对比,算出人的岁数是多少岁几个月几日
- 各位高手请问 --我用属于administrators组的用户登陆到win2000server 但无法使用windows用户验证方式登录到sqlserver2000
- 将数据库中含有图片的数据,按条件导入文件!(数据库SQL SERVER,语言 c#)
- 在Windows 2003下,sql server 2005总出现调试窗口,为什么?如何调试?谢谢!
set @sql='1000000000000000000000000000000000000000'
select charindex('1',@sql)
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
既然songtype都设计成这样了,
何必更直接的 用表1的id直接表示呢? ID Song singer SongType
1 野人的士高 未知 1
2 光阴的故事 罗大佑 2,4
3 小酒窝 林俊杰 4
4 我是小沈阳(DJ) 小沈阳 1,4
select charindex('1','0101000000000000000000000000000000000000') as 第一個1的位置,
charindex('1', stuff('0101000000000000000000000000000000000000',charindex('1','0101000000000000000000000000000000000000'),1,'2')) as 第二個1的位置 -------------------------------
2 4
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) 小沈阳 的士高;流行*/
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