【问题标题】:T-Sql, Split string in the column and insert into table [duplicate]T-Sql,在列中拆分字符串并插入表中[重复]
【发布时间】:2016-06-29 07:53:33
【问题描述】:

我有这样的桌子

Name   |  Email             | Phone number 
alis     alis@123.com        +989355555;+989366666;+9803777777
John     john@yah.com        +989122222
sara     sara@yah.com        +989113212;+989113312

我想要一个查询来像这样选择这个表,然后将这个表插入到另一个表中。

Name   |  Email             | Phone number 
alis     alis@123.com        +989355555
alis     alis@123.com        +989366666
alis     alis@123.com        +9803777777
John     john@yah.com        +989122222
sara     sara@yah.com        +989113212
sara     sara@yah.com        +989113312

拆分所有电话号码并使用相似的字段名称保存。

【问题讨论】:

  • sql server 2016 引入了内置的字符串拆分功能。如果您使用的是较低版本(我们大多数人都是),请阅读 Aaron Bertrand 关于 string splitting functions. 的文章

标签: mysql sql-server database tsql


【解决方案1】:

你可以试试这个(只使用T-SQL):

DECLARE @DataSource TABLE
(
    [Name] VARCHAR(12)
   ,[Email] VARCHAR(12)
   ,[PhoneNumber] VARCHAR(1024)
);

INSERT INTO @DataSource ([Name], [Email], [PhoneNumber])
VALUES ('alis', 'alis@123.com', '+989355555;+989366666;+9803777777')
      ,('John', 'john@yah.com', '+989122222')
      ,('sara', 'sara@yah.com', '+989113212;+989113312');

SELECT DS1.[Name]
      ,DS1.[Email]
      ,DS3.[value]
FROM @DataSource DS1
CROSS APPLY
(
    SELECT CAST(('<X>'+REPLACE(DS1.[PhoneNumber] ,';' ,'</X><X>')+'</X>') AS XML)
) DS2 ([Col])
CROSS APPLY
(
    SELECT T.C.value('.', 'varchar(32)') as value 
    FROM DS2.Col.nodes('X') as T(C)
) DS3 ([value]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多