sql資料庫:根據某分隔符將一條記錄拆分為多行記錄
阿新 • • 發佈:2019-01-05
需要通過身份證號聯表查詢比對,可是房產登記的身份證可能不止一個,查詢的時候只能比對一個身份證號的
所以需要 根據某分隔符將一條記錄拆分為多行記錄
從網上找到一個例子
create table tb(id int,value varchar(30))
insert into tb values(1,'aa,bb')
insert into tb values(2,'aaa,bbb,ccc')
go
SELECT *FROM tb
SELECT A.id, B.value FROM( SELECT id, [value] = CONVERT(xml,'<root><v>' + REPLACE([value], ',', '</v><v>') + '</v></root>') FROM tb )A OUTER APPLY( SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v) )B DROP TABLE tb
重點就是第二步了
1,REPLACE ( 要搜尋的字串表示式, 查詢的子字串, 替換字串)
以上引數都可以是字元或二進位制資料型別
REPLACE([value], ',', '</v><v>') 搜尋value列,將 ,替換為</v><v>
2,CONVERT函式 用來轉換資料型別
如:SELECT CONVERT (VARCHAR(5),12345) 返回:字串 '12345'
[value] = CONVERT(xml,'...........') 將value中的值轉為xml格式
SELECT * FROM( SELECT [合同編號] ,[合同狀態] ,[專案名稱] ,[買受人] ,[買受人證件號] ,[查詢密碼] ,[單體名稱] ,[單元名] ,[房屋房號] ,[房屋用途] ,[房屋型別] ,[建築面積] ,[銷售單價] ,[提交時間] ,[備案時間], [value1] = CONVERT(xml,'<root><v>' + REPLACE([買受人證件號], ' ', '</v><v>') + '</v></root>') FROM [宜城市].[dbo].[房產【多個身份證】] )A OUTER APPLY( SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value1].nodes('/root/v') N(v) )B
在使用的時候只需要更改 買受人證件號 這個位置
其他語句不瞭解什麼意思,還得學習啊