首页 > 解决方案 > 创建表时的 Postgres 格式

问题描述

我的工作是测试 Postgres。我通常使用带有 Oracle 和 Teradata 语法的 SAS 编写 SQL。我们的测试数据库有一个非常草率的表,其中每一列都创建为字符 255。我有一个非常简单的事情正在尝试做,但它不起作用。我想创建一个新表并从 255 重新格式化为 10。我还想删除所有尾随空格。此外,“IS NULL”不起作用。即使没有任何可见的值。

PROC SQL;
CONNECT TO POSTGRES(&connectstuff);
EXECUTE(CREATE TABLE common.UNQ_NUM_LIST AS
        SELECT DISTINCT UNIQUE_NUM, 
               BTRIM(PAT_ACCT) AS PAT_ACCT 
        FROM ACCT_DATA.ACCNTS
) by postgres;
DISCONNECT FROM POSTGRES;
QUIT;

我想将 PAT_ACCT 创建为字符 10 格式,但不确定如何。创建表格时可以指定新格式吗?我尝试过的一切都没有奏效。甚至 BTRIM 实际上似乎也没有摆脱该值的尾随空格。同样,“IS NULL”无法识别空值。我觉得这应该很简单!

标签: sqlpostgresqlsas

解决方案


要影响数据类型,请在查询中适当地转换结果列:

CAST (btrim(pat_acct) AS character(10)) AS pat_acct

但是,没有办法以NOT NULL这种方式设置列。

我建议您执行两条语句:一条以您想要的方式创建表,另一条如

INSERT INTO ...
SELECT ... FROM ...

推荐阅读