2013-08-19 30 views
0

问题:我的公司正在使用Liferay 6.0,它正在升级到Liferay 6.1 GA2。在6.0中,我们在SQL服务器数据库列中有大量具有智能引号字符的行。在自动升级中,智能报价正在被'?'取代。我们计划在升级之前运行查找并替换内容上的SQL语句以防止此问题。我编写了一个小型Java程序来查找字符的ASCII值。该字符在ANSI(“A”)中的显示方式与UTF-8(“A A”)中的显示方式不同。我在前面的句子中夹住了大写字母A之间的明智引用字符。删除SQL服务器文本列中的智能引号

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€ZA是char A的5
ASCII值:字符€226
ASCII值:字符A的65
ASCII值:炭的Z 8364
ASCII值:字符A的381
ASCII值:字符串的65

长度:A A是3 012焦炭A的 ASCII值:焦炭的65
ASCII值: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 

我不怎么找那些cha文本中的部分。有谁知道如何在SQL Server中为智能报价组成搜索查询吗?

回答

0

如果数据类型是文本的事实,第一转换列到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)+']%'