在NChar列的select语句中获取不需要的数据

时间:2018-03-22 12:35:09

标签: sql sql-server sql-server-2008

运行以下查询:

SELECT DISTINCT [RULE], LEN([RULE]) FROM MYTBL WHERE [RULE] LIKE 'Trademarks, logos, slogans, company names, copyrighted material or brands of any third party%'

我得到的输出为: enter image description here

列数据类型为 NCHAR(120),使用的排序规则为 SQL_Latin1_General_CP1_CI_AS

最后插入一个额外的前导空格。但是使用 RTRIM 功能,我也无法修剪额外的空间。我不确定在这里插入了哪种类型的前导空格(编码)。

除了RTRIM之外,你可以建议其他一些替代方案,以便在列 NCHAR 时最后消除额外的空白区域。

以下是我已经尝试过的事情:

  1. RTRIM(LTRIM(CAST([RULE] as VARCHAR(200))))
  2. RTRIM([RULE])
  3. 更新问题 请从这里下载数据库TestDB

    请使用以下查询作为参考:

    SELECT DISTINCT [RULE], LEN([RULE]) FROM [TestDB].[BI].[DimRejectionReasonData]
    WHERE  [RULE] 
    LIKE 'Trademarks, logos, slogans, company names, copyrighted material or brands of any third party%' 
    

3 个答案:

答案 0 :(得分:0)

字符串中可能有non-breaking space nchar(160)。 您可以将其转换为简单空格,然后使用通常的trim函数

LTRIM(RTRIM(REPLACE([RULE], NCHAR(160), ' '))) 

如果是unicode空间

LTRIM(RTRIM(REPLACE(RULE, NCHAR(0x00A0), ' ')))

答案 1 :(得分:0)

我想这就是你要找的东西(不确定)。试试这种方法

SELECT REPLACE(REPLACE([RULE], CHAR(13), ''), CHAR(10), '')

参考链接:Link 1& Link 2

注意:仅供参考,请参阅这些链接以便更好地理解。

答案 2 :(得分:0)

将类型nchar更改为varchar,它将返回没有多余空间的结果