从SQL Server文本列中删除智能引号

时间:2013-08-19 02:50:55

标签: sql-server smart-quotes

问题:我的公司正在使用升级到Liferay 6.1 GA2的Liferay 6.0。在6.0中,我们在SQL Server数据库列中有大量具有智能引号字符的行。在自动升级中,智能引号被替换为“?”。我们计划在升级之前对内容运行查找和替换SQL语句以防止此问题。我写了一个小的Java程序来查找字符的ASCII值。 ANSI(“A”A“)中的字符与UTF-8(”A A“)中的字符不同。我在前一句中把资本A之间的智能引号括起来了。

public class CheckAscii {
    public static void main(String args[]) {
        asciiVals("A‎A"); //ANSI
        asciiVals("A‎A"); //UTF-8
    }
    static void asciiVals(String str) {
        System.out.println("Length of the string: " + str + " is " + str.length());
        for (int j=0; j<str.length(); j++){
            System.out.println("Ascii value of char " + str.charAt(j) + " : " + (int)str.charAt(j));
        }
        System.out.println("");
    }
}

输出

字符串的长度:AA是5
字符A的Ascii值:65
字符值的Ascii值:226
Ascii值char€:8364
char的Ascii值:381
字符A的Ascii值:65

弦长:A A为3
字符A的Ascii值:65
Ascii值char:8206
字符A的Ascii值:65

以下查询没有给我任何行,

SELECT [COLUMN] FROM [TABLE] where [COLUMN] like '%['+char(226)+']%'
SELECT [COLUMN] FROM [TABLE] where [COLUMN] like '%['+char(8364)+']%'
SELECT [COLUMN] FROM [TABLE] where [COLUMN] like '%['+char(381)+']%'
SELECT [COLUMN] FROM [TABLE] where [COLUMN] like '%['+char(8206)+']%'

此查询提取

select CHAR(226), CHAR(8364), CHAR(381), CHAR(8206)

â null null null

我不知道如何在文本中查找这些字符。有谁知道如何在SQL Server中为智能引号形成搜索查询?

1 个答案:

答案 0 :(得分:0)

如果数据类型实际上是TEXT,首先将列转换为VARCHAR(MAX),如下所示:

SELECT [COLUMN] FROM [TABLE] where CAST([COLUMN] AS VARCHAR(MAX)) like '%['+char(226)+']%'
SELECT [COLUMN] FROM [TABLE] where CAST([COLUMN] AS VARCHAR(MAX)) like '%['+char(8364)+']%'
SELECT [COLUMN] FROM [TABLE] where CAST([COLUMN] AS VARCHAR(MAX)) like '%['+char(381)+']%'
SELECT [COLUMN] FROM [TABLE] where CAST([COLUMN] AS VARCHAR(MAX)) like '%['+char(8206)+']%'