阅读以下链接后..
我决定将文本中的列更改为:
int(9) UNSIGNED ZEROFILL NOT NULL
但是,我不确定要使用的SQL语句。我知道下面的内容不正确,因为它不包括9位数,无符号的zerofill而不是NULL参数。
ALTER TABLE "Organizations" ALTER COLUMN "EIN" TYPE INTEGER using "EIN"::INTEGER
更新: 由于Postgres不使用zerofill或INT(9)。 9位数的EIN号的推荐数据类型是什么?
答案 0 :(得分:2)
我会在下面的两个陈述中推荐以下内容:
ALTER TABLE "Organizations" ALTER COLUMN "EIN" TYPE INTEGER using "EIN"::INTEGER;
ALTER TABLE "Organizations" ALTER COLUMN "EIN" SET NOT NULL;
使用padding零的装饰可以通过客户端(或规则,有效只是一个视图,选择相反,然后我认为在这里过度复杂 - (和更改为int以选择带有零的文本 - 不进行选择)进行选择sound reasonambe))),例如:
t=# select lpad(123::int::text,9,'0');
lpad
-----------
000000123
(1 row)
所以如果需要,可以嘲笑
答案 1 :(得分:1)
对于9位数限制,int
以上的域可以正常工作:
CREATE DOMAIN ein AS int CHECK (VALUE>0 AND VALUE<1000000000);
然后ein
可以在声明中用作类型,例如:
=> CREATE TABLE test(id ein, t text);
CREATE TABLE
=> insert into test values(2*1e9::int);
ERROR: value for domain ein violates check constraint "ein_check"
=> insert into test values(100);
INSERT 0 1
zerofill
位不同,它是关于演示,而不是存储,
并且该部分不能专门用于域。
您可以改为将to_char
应用于值,例如:
=> select to_char(id,'000000000') from test;
to_char
------------
000000100
并可能通过存储的视图或演示文稿访问它
仅将ein
作为参数的函数
如果您更愿意从客户端抽象出来。
为了更进一步,您可以使用CREATE TYPE
创建完整类型
支持C
和INPUT
函数的OUTPUT
代码,这些函数可以实现9位左填充格式作为输入/输出格式,这样用户可能永远不会看到SQL级别的任何其他内容。