在Sql Server中搜索和替换字节顺序标记

时间:2014-11-19 16:10:37

标签: sql sql-server search encoding byte-order-mark

我有10个表和超过10000个包含的记录 如何搜索并在数据库中替换它? 由于等于0xEF,0xBB,0xBF怎么能搜索到这个?

我使用此代码

 WITH foo(myvarbincolumn) AS
(
SELECT text from BPM_Letters
)
SELECT *
FROM   foo
WHERE  CONVERT(VARCHAR(max), myvarbincolumn) COLLATE Arabic_CI_AS
                    LIKE '%' + CONVERT(NVARCHAR(max), CHAR(0xEF)+CHAR(0xBB)+CHAR(0xBF)) + '%' 

我在stackoverflow中找到了这个代码,但它不完整。

script of BPM_Letters 这段代码找不到任何记录! 请帮帮我

3 个答案:

答案 0 :(得分:3)

我写了一个查询,通过下面的查询找到那个奇怪的字符:

SELECT cast(LEFT(text,1) AS VARBINARY(MAX)) from BPM_Letters  

,结果是0xFFFE。所以我写了这个查询,它运作得很好:

UPDATE BPM_Letters Set text=REPLACE(text,0xFFFE,'');

答案 1 :(得分:1)

这个CTE怎么样:

StripBOM AS
(
   SELECT CASE
             WHEN LEFT(text,3) = 0xEFBBBF
                THEN CONVERT(varbinary(max),SUBSTRING(text, 4, LEN(text)))
             ELSE text             
           END AS text
   FROM BPM_Letters
)

它应该为您提供一个新表格,其中所有BOM字符都已被剥离。

P.S。此代码假设为text'字段的类型为varbinary

答案 2 :(得分:0)

这是一个基于其他答案的简单答案:

UPDATE BPM_Letters SET text=substr(text, 4) WHERE left(text, 3) = 0xEFBBBF;

我已经对此进行了测试,但它确实有效。