select id from (select id from table order by id asc) t where not exists (select 1 from table where id=t.id-1)
#篩選出當(dāng)前記錄存在,但是前一條記錄不存在的id
&&
select Id+1 from ntf_sms_black_list a where not exists(select * from ntf_sms_black_list b where b.Id = a.Id + 1) and Id < (select MAX(Id) from ntf_sms_black_list)
#篩選出不連續(xù)的缺失id(當(dāng)前記錄存在,下一條記錄不存在)
sqlserver 查詢結(jié)果拼接成字符串
# for xml path(param)--將查詢結(jié)果以xml格式輸出
- path后面沒(méi)有參數(shù)時(shí)功蜓,每行數(shù)據(jù)被默認(rèn)<row>標(biāo)簽包裹飘千,每行列數(shù)據(jù)被被其列名標(biāo)簽包裹虫碉。
select id,name from table1 for xml path
# 結(jié)果
<row>
<id>1</id>
<name>holab</name>
</row>
<row>
<id>2</id>
<name>name1</name>
</row>
- 每行數(shù)據(jù)最外面包裹的標(biāo)簽由path的參數(shù)控制(沒(méi)有參數(shù)時(shí)搁拙,默認(rèn)為row)杆逗,所以要去掉則可以直接給一個(gè)空字符串作為path的參數(shù)霜瘪。
- 每行列數(shù)據(jù)所被直接包裹的標(biāo)簽由查詢結(jié)果的列名控制喧半,要去掉只需要保證查詢出來(lái)的列沒(méi)有列名就可以了(保證沒(méi)有列名最簡(jiǎn)單的方法是給每個(gè)字段加一個(gè)空字符串)。
#stuff函數(shù)
stuff(character_expression,start,length,replaceWith_expression)
刪除指起始位置(start)指定長(zhǎng)度(length)的字符材义,并在該位置插入代替的字符(replaceWith_expression)
-character_expression 由字符數(shù)據(jù)組成的表達(dá)式.可以是常量,變量,也可以是字符或二進(jìn)制數(shù)據(jù)的列
-start 整型值,指定刪除和插入的開(kāi)始位置.如果start和length是負(fù)數(shù),則返回空字符串.如果start比第一個(gè)character_expression長(zhǎng),則返回空字符串.
-length 整型值,指定要?jiǎng)h除的字符數(shù).如果length比第一個(gè)character_expression長(zhǎng),則最多刪除到最后一個(gè)character_expression的最后一個(gè)字符
-replaceWith_expression 用于替換的字符串
#row_number() over(order by column)--為查詢結(jié)果添加序號(hào)列
select id,name,row_number over(order by id) as num from table1
#結(jié)果
id name num
1 holab 1
2 name1 2
4 name 3
5 ....
#將查詢結(jié)果拼接成以逗號(hào)分隔的字符串--每條數(shù)據(jù)以逗號(hào)分隔
select stuff((select ','+id+':',name+'' from table1 for xml path('')),1,1,'')
#將查詢結(jié)果的每條數(shù)據(jù)換行顯示(每行開(kāi)頭添加序號(hào))
select (select row_number() over(order by id)+'均抽、',id+':',name+char(10) from table1 for xml path(''))