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

在使用的时候只需要更改  买受人证件号  这个位置

其他语句不了解什么意思,还得学习啊

猜你喜欢

转载自blog.csdn.net/qq_21036939/article/details/85835373