2016-11-16 71 views
0

我想选择几个字段并将它们放在引号中,因为我必须将这些记录导出到平面文件中,然后将它们插入到另一个数据库中。所以我在Oracle上运行这些查询,并且在尝试添加这些引号时遇到问题。这是我试图运行查询:如何选择引号内的字段?

SELECT 
    'connection_string' || '|' || 
    ''' || employee_name || ''' 
FROM 
    table1 

而且我想输出是:

'connection_string'|'Bob' 
'connection_string'|'Jane' 

我也试过

SELECT 
    'connection_string' || '|' || 
    '' || employee_name || '' 
FROM 
    table1 

这显然不工作。 connection_string是静态的并且保持不变,并且结果应该由管道分隔

回答

2

你只是在输出中寻找单引号?如果是这样的:

SELECT '''' || 'connection_string' || '''|''' || 
     employee_name || '''' 
FROM table1; 

两个单引号在一排 - 在一个字符串 - 代表一个单引号。或者换句话说,您需要连续四个字符串,以便使用单个单引号:

'''' 
^ starts the string 
-^^ the single quote 
---^ ends the string 
+0

哈,那样做了。所以在4个引号中,第二个引用的目的是什么? – simplycoding

+0

quuote one说一个字符串的开始,引用二是逃避第三个引号,这是你正在寻找的第四个引号,第四个是结束字符串。 –

+0

@simplycoding - 做到了?在我的机器上,它给出了一个错误信息(出于一个显而易见的原因:''''''''''是不正确的 - 它只产生一个字符串,只有一个字符,一个单引号,然后管道符号在任何引号之外,然后是单引号的另一个单字符字符串)。 – mathguy

0

您的意思是这样的吗?使用SCOTT模式中的EMP表。

select ename, '''connection_string''|''' || ename || '''' 
from scott.emp; 

ENAME  '''CONNECTION_STRING''|'''||ENAM 
---------- -------------------------------- 
SMITH  'connection_string'|'SMITH' 
ALLEN  'connection_string'|'ALLEN' 
WARD  'connection_string'|'WARD' 
JONES  'connection_string'|'JONES' 
MARTIN  'connection_string'|'MARTIN' 
BLAKE  'connection_string'|'BLAKE' 
CLARK  'connection_string'|'CLARK' 
SCOTT  'connection_string'|'SCOTT' 
KING  'connection_string'|'KING' 
TURNER  'connection_string'|'TURNER' 
ADAMS  'connection_string'|'ADAMS' 
JAMES  'connection_string'|'JAMES' 
FORD  'connection_string'|'FORD' 
MILLER  'connection_string'|'MILLER' 
0

Anoter方式可以使用Q syntax

SQL> with tableA(a) as (
    2 select 'aaa' from dual union all 
    3 select 'AAA' from dual 
    4 ) 
    5 select q'[Your string ']' || a || q'[']' as A 
    6 from tableA; 

A 
----------------- 
Your string 'aaa' 
Your string 'AAA' 

在这种情况下,它可能是一个有点多余,但它可以在更复杂的情况下非常有用。