【问题标题】:Write pipe delimited column names in teradata在 teradata 中写入管道分隔的列名
【发布时间】:2017-10-10 12:02:39
【问题描述】:

我正在使用下面的查询来生成一个以管道分隔的文件,但我还想要以管道分隔的列名。你能帮我解决这个问题吗?

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;

【问题讨论】:

  • 最好切换到 Teradata 的 CSV,而不是所有这些 concats:info.teradata.com/HTMLPubs/DB_TTU_16_00/SQL_Reference/…
  • 向 Teradata CSV 添加针对 DBC 字典视图 ColumnsV 的查询以动态获取列名。
  • 可能更简单,但试试这个。但是感谢您在此问题上的快速转变

标签: sql teradata


【解决方案1】:

如果我理解正确,您需要一个表列名称或您当前的派生列,即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;

希望它会有所帮助:-)

【讨论】:

    猜你喜欢
    • 2011-10-18
    • 2012-07-31
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多