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

时间:2013-07-19 12:56:19

标签: sql oracle unicode ascii

是否有一种简单的方法可以在Oracle表中查找特定NVARCHAR2列中包含一个或多个不符合标准ASCII范围的字符的行?

(我正在构建一个仓库和数据提取过程,它接收Oracle数据,将其拖入SQL Server - UCS-2 NVARCHAR - 然后将其导出为UTF-8 XML文件。我很确定我正在正确地进行所有翻译,但我想找到一堆真实的数据来测试,这更有可能导致问题。)

2 个答案:

答案 0 :(得分:1)

不确定如何在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 :(得分:1)

Sparky的SQL Server示例足以让我找到一个非常简单的Oracle解决方案,一旦我找到了方便的ASCIISTR()功能。

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

...似乎找到了标准7位ASCII范围之外的任何数据,并且似乎适用于NVARCHAR2和VARCHAR2。