在NVARCHAR列中查找ASCII范围之外的字符值

问题描述:

是否有一种简单的方法可以在Oracle表中找到特定NVARCHAR2列包含一个或多个不符合标准ASCII范围的字符的行? (我正在构建一个仓库和数据提取过程,它将Oracle数据拖入SQL Server - UCS-2 NVARCHAR - 然后将其导出到UTF-8 XML文件。我很漂亮确定我正在做所有的翻译,但我想找到一堆真实的数据来测试,这很可能会导致问题。)在NVARCHAR列中查找ASCII范围之外的字符值

斯帕克的SQL Server的例子就足以使我一个非常简单的Oracle解决方案,有一次,我发现得心应手ASCIISTR()功能。

SELECT 
    * 
FROM 
    test_table 
WHERE 
    test_column != ASCIISTR(test_column) 

...似乎找到了标准的7位ASCII范围之外的任何数据,并显示为NVARCHAR2和VARCHAR2工作。

不知道如何在Oracle中解决这个问题,但这里有一些东西我在MS-SQL来处理同样的问题做了...

create table #temp (id int, descr nvarchar(200)) 

insert into #temp values(1,'Now is a good time') 
insert into #temp values(2,'So is yesterday') 
insert into #temp values(2,'But not '+NCHAR(2012)) 

select * 
from #temp 
where CAST(descr as varchar(200)) <> descr 

drop table #temp 
+1

这可能会有所帮助,虽然它不会在7位ASCII之外发现一些东西(插入#temp值(2,'Mais pas l''été')')我可以修复SQL Server,但我对Oracle的了解不多...... –

+0

+1帮助指向正确的方向找到Oracle的等价物。 –