SQL: 帮助规范化数据
SQL: Help normalize data
我有一个 table,其中有一列是这样的:
Name
-----
ABC\name1
DEFG\name2
ABC\name3
xy\name4
ghi\name5
我试图用“\”字符分隔“名称”列中的字段。删除“\”之前的所有内容(包括“\”)或将 Name 列分成 2 个新列,如下所示:
Domain Name
------------
ABC name1
DEFG name2
ABC name3
xy name4
ghi name5
我如何/查询看起来像什么来更新我的 table 看起来像这样?
谢谢!
根据 Aaron Bertrand 爵士的评论,您可以使用 SUBSTRING and CHARINDEX:
;WITH TestData(Name) AS(
SELECT 'ABC\name1' UNION ALL
SELECT 'DEFG\name2' UNION ALL
SELECT 'ABC\name3' UNION ALL
SELECT 'xy\name4' UNION ALL
SELECT 'ghi\name5'
)
SELECT
Domain = SUBSTRING(Name, 1, CHARINDEX('\', Name) - 1),
Name = SUBSTRING(Name, CHARINDEX('\', Name) + 1, LEN(Name) - CHARINDEX('\', Name))
FROM TestData
结果
Domain Name
---------- ----------
ABC name1
DEFG name2
ABC name3
xy name4
ghi name5
我有一个 table,其中有一列是这样的:
Name
-----
ABC\name1
DEFG\name2
ABC\name3
xy\name4
ghi\name5
我试图用“\”字符分隔“名称”列中的字段。删除“\”之前的所有内容(包括“\”)或将 Name 列分成 2 个新列,如下所示:
Domain Name
------------
ABC name1
DEFG name2
ABC name3
xy name4
ghi name5
我如何/查询看起来像什么来更新我的 table 看起来像这样?
谢谢!
根据 Aaron Bertrand 爵士的评论,您可以使用 SUBSTRING and CHARINDEX:
;WITH TestData(Name) AS(
SELECT 'ABC\name1' UNION ALL
SELECT 'DEFG\name2' UNION ALL
SELECT 'ABC\name3' UNION ALL
SELECT 'xy\name4' UNION ALL
SELECT 'ghi\name5'
)
SELECT
Domain = SUBSTRING(Name, 1, CHARINDEX('\', Name) - 1),
Name = SUBSTRING(Name, CHARINDEX('\', Name) + 1, LEN(Name) - CHARINDEX('\', Name))
FROM TestData
结果
Domain Name
---------- ----------
ABC name1
DEFG name2
ABC name3
xy name4
ghi name5