REPLACE CHAR(0) NVARCHAR Latin1_General_CI_AS collation

天涯浪子 提交于 2021-02-08 06:36:39

问题


In SQL Server I am trying to replace CHAR(0) with '' but it is not working as my field is actually a NVARCHAR field, my collation is Latin1_General_CI_AS but when I convert to SQL_Latin1_General_CP1_CI_AS it only works for VARCHAR and not NVARCHAR.

SELECT val, REPLACE(val , CHAR(0), 'x')
FROM    (
         SELECT 'a' + CHAR(0) + 'b' AS val
        ) AS X

Returns a | a

SELECT val, REPLACE(CAST(val COLLATE SQL_Latin1_General_CP1_CI_AS AS varchar(100)), CHAR(0), 'x')
FROM    (
         SELECT 'a' + CHAR(0) + 'b' AS val
        ) AS X

Returns a | axb

SELECT val, REPLACE(CAST(val COLLATE SQL_Latin1_General_CP1_CI_AS AS varchar(100)), CHAR(0), 'x')
FROM    (
         SELECT CAST('a' + CHAR(0) + 'b' AS NVARCHAR(100)) AS val
        ) AS X
SELECT val, REPLACE(CAST(val COLLATE SQL_Latin1_General_CP1_CI_AS AS nvarchar(100)), CHAR(0), 'x')

Returns a | axb

FROM    (
         SELECT CAST('a' + CHAR(0) + 'b' AS NVARCHAR(100)) AS val
        ) AS X
SELECT val, REPLACE(CAST(val COLLATE SQL_Latin1_General_CP1_CI_AS AS varchar(100)), nCHAR(0), 'x')

Returns a | a

FROM    (
         SELECT CAST('a' + CHAR(0) + 'b' AS NVARCHAR(100)) AS val
        ) AS X
SELECT val, REPLACE(CAST(val COLLATE SQL_Latin1_General_CP1_CI_AS AS nvarchar(100)), nCHAR(0), 'x')

Returns a | a

FROM    (
         SELECT CAST('a' + CHAR(0) + 'b' AS NVARCHAR(100)) AS val
        ) AS X

Returns a | a

Is there a way that I can replace the 0x0000 characters with '' and not lose my NVARCHAR state

Edit: the expected value is a | axb for the last query (or one that is similar but will support NVARCHAR.


回答1:


Use a binary collate clause and there is no need to CAST

;WITH T
     AS (SELECT CAST('a' + CHAR(0) + 'b' AS NVARCHAR(100)) AS val)
SELECT val,
       REPLACE(val COLLATE Latin1_General_100_BIN, nCHAR(0), 'x')
FROM   T 


来源:https://stackoverflow.com/questions/13914847/replace-char0-nvarchar-latin1-general-ci-as-collation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!