我需要帮助根据多种条件清理输出字符串数据库



我决定在论坛上写一篇文章,询问是否有人有类似的任务或精通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

最新更新