问题
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