按类似字符串分组 - Transact SQL

时间:2016-07-07 14:53:26

标签: sql tsql

我的排名脚本运行得很好 - 而它排名前30个月销售的产品,但在过去的几个月里,我的数据发生了一些变化。所以产品名称来自:

    product_name 

   product_name@

其中@是某种特殊字符。请注意,特殊字符并不总是只有一个字符,有时特殊字符和名称之间会有一个空格。此外,产品名称并不总是以字母结尾,有时它以数字结尾。数据中的这种奇怪现象似乎是随机发生的,也可能是各种产品名称。我在这张桌子上有超过50,000种产品。有没有办法可以按产品分组?或者可能关闭特殊字符?

1 个答案:

答案 0 :(得分:0)

如果这些是尾随符号,请查看此解决方案:

SELECT RTRIM(SUBSTRING(Name, 1, CASE WHEN PATINDEX('%[$#@]%', Name)!=0 THEN PATINDEX('%[$#@]%', Name)-1 ELSE LEN(Name) END)) Word, COUNT(*) Total
FROM (VALUES
    ('Cat $#@'),
    ('Cat $'),
    ('Dog'),
    ('Dog$'),
    ('Cat'),
    ('Cat ')) T(Name)
GROUP BY RTRIM(SUBSTRING(Name, 1, CASE WHEN PATINDEX('%[$#@]%', Name)!=0 THEN PATINDEX('%[$#@]%', Name)-1 ELSE LEN(Name) END))

用括号[$#@]和RTrimmed中的任何特殊字符剪切单词以删除不必要的空格。