我决定在论坛上写一篇文章,询问是否有人有类似的任务或精通SQL来帮助我提供我需要提供的报告。
我需要做什么来提取数据才能从数据库中获取没有子类别的所有类别。不幸的是,数据库中存在差异,因为某些记录具有不同的格式,其中一些记录包含不同的奇数字符以及空值。
我设法删除了包含结束标签">"的字符,但我正在努力删除其他字符。 下面是我当前查询的当前输出和预期结果。
如果可能的话,请有人看看并提供帮助。
SELECT
SUBSTRING(Category, 1 ,
CASE
WHEN CHARINDEX('>', Category) = 0 THEN LEN(Category)
WHEN CHARINDEX(',', Category) = -1 THEN LEN(Category)
ELSE CHARINDEX('>', Category) -1
END) AS 'Category',
COUNT(Category) AS 'No. Listings'
FROM
tbl_Listing
GROUP BY
SUBSTRING(Category, 1 ,
CASE
WHEN CHARINDEX('>', Category) = 0 THEN LEN(Category)
WHEN CHARINDEX(',', Category) = -1 THEN LEN(Category)
ELSE CHARINDEX('>', Category) -1
END) AS 'Category',
现在
ID ¦ Category ¦
---+-----------------------------
1 | eating,places-to-go
2 | education,clubs,
3 | education,library.
4 | education,parties.
5 | local-service/,
6 | places-to-go,service,
7 | Null
预期成果
ID ¦ Category ¦
---+-----------------------------
1 | eating
2 | education
3 | education
4 | education
5 | local-service
6 | places,
7 | Null
代替charindex()
,请使用patindex()
:
select left(category, patindex('%[,/>]%', category + ',') - 1) as CleanString
这使得添加其他"奇数"字符变得更加容易。
注意 在 CHARINDEX(( 中,我们将slash
替换为comma
,并添加comma
作为故障安全
不清楚为什么最后要去的地方只是地方
例
Select *
,CleanString = left([Category],charindex(',',replace([Category],'/',',')+',')-1)
From YourTable
返回
ID Category CleanString
1 eating,places-to-go eating
2 education,clubs, education
3 education,library. education
4 education,parties. education
5 local-service/, local-service
6 places-to-go,service, places-to-go
7 NULL NULL