SQL 在声明中使用中文字母

SQL Using Chinese Letters in Statement

这周我一直在搜索,但我还没有找到解决方案。提前感谢您的帮助!

我正在尝试通过 运行 将 SQL 查询作为批处理文件通过 sqlplus Windows cmd 自动执行。我对这个工具非常有限,因为我工作的公司不支持 sql cl。总的来说 sqlplus 工作正常 - 它读取查询并给出输出,除了它显然跳过了带有中文字母的部分。

在 SQL 开发人员中,整个查询有效。

目的是return位于高速公路的元素数量,所以语句的一部分是在addr_street字段中搜索highway/autobahn/.. .:

AND ((addr_street Like '%Autobahn%'            
   OR addr_street Like '%Autovia%'            
   OR addr_street Like '%Autopista%'          
   OR addr_street Like '%Interstate%'        
   OR addr_street Like '%Highway%'
   OR addr_street Like '%Autostrada%'
   OR addr_street Like '%公路%'

.....

如何将中文字母部分改写为ASCII码,使cmd上的sqlplus能够读取文件?

我尝试使用 unistr 函数 - SQL 开发人员中的查询没有 return 错误,但在使用不同输入的几次尝试中没有 return 任何其他结果。

AND ((addr_street Like '%Autobahn%'            
   OR addr_street Like '%Autovia%'            
   OR addr_street Like '%Autopista%'          
   OR addr_street Like '%Interstate%'        
   OR addr_street Like '%Highway%'
   OR addr_street Like '%Autostrada%'
   OR addr_street Like unistr('31CC2D27[=12=]B7[=12=]AF')  

所以我的问题很简单:

如何重写

OR addr_street Like '%公路%'

不使用中文符号得到相同的结果?您会使用另一个 tool/approach 而不是 sqlplus 吗?

使用单引号而不是双引号来创建文本文字,对于 NVARCHAR2/NCHAR 文本文字,您需要在其前面加上 N

CREATE TABLE table_name ( value NVARCHAR2(20) );
INSERT INTO table_name VALUES (N'玄真');

查询

SELECT * FROM table_name

select asciistr(N'玄真') from table_name --this is optional if you already insert value with 'N'

结果

| VALUE |
|-------|
|    玄真 |

Unistr 似乎在这里工作,让我们首先使用 asciistr:

select asciistr(n'公路') from dual   --> result:  6CDEF

并在查询中使用这些值:

with t(addr_street) as (select 'x公路q' from dual)
select * from t where addr_street like '%' || unistr('6CDEF') || '%'

找到行。