1. 程式人生 > >sql資料庫:根據某分隔符將一條記錄拆分為多行記錄

sql資料庫:根據某分隔符將一條記錄拆分為多行記錄

需要通過身份證號聯表查詢比對,可是房產登記的身份證可能不止一個,查詢的時候只能比對一個身份證號的

所以需要 根據某分隔符將一條記錄拆分為多行記錄

從網上找到一個例子

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

在使用的時候只需要更改  買受人證件號  這個位置

其他語句不瞭解什麼意思,還得學習啊