2017-10-09 50 views
0

我正在使用以下查询来生成管道分隔文件,但我也希望使用管道分隔列名称。你能帮我解决这个问题吗?在teradata中编写管道分隔的列名称

select cast (sample_dt||'|'||trim(trailing '.' from trim(leading ' ' from acct_id))||'|'||name1||'|'||ent_sub_lob||'|'||app_dt||'|'||home_phn_num||'|'||city_1_name||'|'||geo_st_cd||'|'||surveyid||'|'||study_type||'|'||ent_lob||'|'||channel||'|'||market_C||'|'||merchant_id as char(300)) 
from ud.testing; 
+1

代替所有的concats更好地切换到Teradata的CSV:https://info.teradata.com/HTMLPubs/DB_TTU_16_00/SQL_Reference/B035-1145-160K/ mah1472241143314.html# – dnoeth

+0

添加到Teradata CSV查询针对DBC字典视图ColumnsV动态获取列名称。 –

+0

可能会更容易,但力德试试这个。但是,谢谢你快速解决这个 –

回答

0

如果我理解正确的话,您可能需要一个表的列名或当前的派生列,即cast (sample_dt||'|'||trim(trailing '.' from.....|分离。在这两种情况下,您只需要在列名称周围使用双引号"",如下所示。

在创建表:

create TABLE t1(
"x1 | y1" char(300) 
); 

您可以查看创建的表定义与show命令。

show TABLE t1; 

CREATE SET TABLE t1 ,NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKRATIO 
    (
     "x1 | y1" CHAR(300) CHARACTER SET LATIN NOT CASESPECIFIC) 
PRIMARY INDEX ("x1 | y1"); 

在派生列:

SELECT 'abc'||' | '|| 'zyc' as "Test | ABC"; 

Test | ABC 
---------- 
abc | zyc 

您当前的查询将成为。

SELECT CAST (sample_dt||'|'||trim(TRAILING '.' 
            FROM trim(LEADING ' ' 
              FROM acct_id))||'|'||name1||'|'||ent_sub_lob||'|'||app_dt||'|'||home_phn_num||'|'||city_1_name||'|'||geo_st_cd||'|'||surveyid||'|'||study_type||'|'||ent_lob||'|'||channel||'|'||market_C||'|'||merchant_id AS char(300)) AS "Pipe | Seperated" 
FROM ud.testing; 

希望这将有助于:-)

+0

奇妙的工作,非常感谢 –