如何在SQL Server中合并不同长度的重复值?

问题描述 投票:0回答:1

这是我的询问:

SELECT 
    *, 
    LEN(Test) LENofTEST, 
    DATALENGTH(Test) DataLENofTEST, 
    CAST(Test AS VARBINARY(30)) ExtraColumn
FROM
    (SELECT 
         TRIM(SOS1 + ',' + REPLACE(PANO20, ' ', '')) AS 'Test', 
         COUNT(SOS1 + ',' + REPLACE(PANO20, ' ', '')) AS 'COUNTR'
     FROM 
         MyServerName.dbo.MyTableName
     WHERE 
         PANO20 LIKE '%701001207%'
     GROUP BY 
         TRIM(SOS1 + ',' + REPLACE(DUMP(PANO20), ' ', ''))) A

这些是我的结果:

Test            COUNTR   LENofTEST   DataLENofTEST   ExtraColumn
-----------------------------------------------------------------
100,701001207   1        13             13   0x3130302C373031303031323037
100,701001207   1        14             14   0x3130302C373031303031323037A0
123,701001207   1        13             13   0x3132332C373031303031323037

我的问题是前两行。它们的长度应该相同,因此

COUNTR
应为 2。

但由于某种原因,SQL 将它们称为不同长度的不同值。

如何调整我的查询,以便将它们计为相同的“测试”?显然我想系统地、可重复地做到这一点。

提前谢谢您!

sql-server
1个回答
0
投票

而不是做

TRIM(Foo)

(仅修剪掉常规空格)

你可以做

TRIM(NCHAR(0x0020) /*SP*/ + NCHAR(0x00A0) /*NBSP*/ + NCHAR(0x200B) /*ZWSP*/ FROM Foo)

修剪更多种类的空间。

请参阅 空白字符 维基百科文章,了解您可能想要添加的其他可能性。

© www.soinside.com 2019 - 2024. All rights reserved.