在语句中使用中文字母的SQL

这个星期我一直在搜索很多东西,但是还没有找到解决方法。感谢您的提前帮助!

我试图通过在Windows cmd中通过sqlplus将其作为批处理文件运行来自动执行SQL查询。我非常局限于此工具,因为我工作的公司不支持sql cl。总体sqlplus可以正常工作-它可以读取查询并提供输出,但显然可以跳过带有中文字母的部分。

在SQL Developer中,整个查询有效。

目的是返回位于高速公路上的元素数量,因此该语句的一部分是在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 Developer中的查询未返回错误,但是在几次尝试中使用不同的输入均未返回任何其他结果。

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('\0631\06CC\062D\0627\00B7\00AF')  

所以我的问题很简单:

如何重写

OR addr_street Like '%公路%'

不使用中文符号并获得相同的结果?您会使用sqlplus以外的其他工具/方法吗?

pumplee 回答:在语句中使用中文字母的SQL

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

select asciistr(n'公路') from dual   --> result:  \516C\8DEF

并在查询中使用这些值:

with t(addr_street) as (select 'x公路q' from dual)
select * from t where addr_street like '%' || unistr('\516C\8DEF') || '%'

找到行。

,

使用单引号而不是双引号来创建文本文字,对于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 |
|-------|
|    玄真 |
本文链接:https://www.f2er.com/3006856.html

大家都在问