问题

我的工作是测试Postgres.我通常使用SAS使用Oracle和Teradata语法编写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实际上也似乎也没有摆脱该值上的尾随空格.再次,null值也没有被“IS NULL”识别.我觉得这应该非常简单!

  最佳答案

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

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

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

我建议您执行两个语句:一个按您想要的方式创建表,另一个类似

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

  相同标签的其他问题

sqlpostgresqlsas