Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何在postgres中以整数类型存储字母数字值?_Database_Postgresql_Rdbms - Fatal编程技术网

Database 如何在postgres中以整数类型存储字母数字值?

Database 如何在postgres中以整数类型存储字母数字值?,database,postgresql,rdbms,Database,Postgresql,Rdbms,我需要在数据库中存储这个人的id。但是id应该在开头包含一个alpha。为此,我遵循了以下内容: 对于id列,我将默认值设置为 create table alphanumeric (id int default ('f'||nextval('seq_test'))::int) ; 所以现在创建的表如下所示 default (('f'::text || nextval('seq_test'::regclass)))::integer 创建表之后,我插入显示错误的值,如 INSERT INTO

我需要在数据库中存储这个人的id。但是id应该在开头包含一个alpha。为此,我遵循了以下内容:

对于id列,我将默认值设置为

create table alphanumeric (id int default ('f'||nextval('seq_test'))::int) ;
所以现在创建的表如下所示

default (('f'::text || nextval('seq_test'::regclass)))::integer
创建表之后,我插入显示错误的值,如

INSERT INTO alpha VALUES (default) ;
ERROR:  invalid input syntax for integer: "f50" 
我理解错误,但我需要这种类型的存储


注意:我不想使用函数或触发器

您希望为您的id使用字符串,因此请为您的id使用文本列:

如果您只对该列使用seq_测试,那么您可能希望它是:

这样,如果您删除表,序列将被删除,并且不会有未使用的序列扰乱数据库


关于这个id方案,您可能需要注意的一点是,它们不会像人类那样对它们进行排序;'例如,f100'<'f2'将为真,并且可能会产生副作用,您需要解决这些副作用。

您希望为id使用字符串,因此请为id使用文本列:

如果您只对该列使用seq_测试,那么您可能希望它是:

这样,如果您删除表,序列将被删除,并且不会有未使用的序列扰乱数据库


关于这个id方案,您可能需要注意的一点是,它们不会像人类那样对它们进行排序;'例如,f100'<'f2'将是正确的,这可能会产生副作用,您需要解决。

只需在@muistooshort的答案上再加几分钱。如果确定所需的ID将始终符合某个正则表达式,则可以通过检查约束强制执行该规则:

CREATE TABLE alphanumeric (
  id VARCHAR DEFAULT ('f' || nextval('seqtest') PRIMARY KEY,
  ...
  CHECK(id ~ '^[A-Za-z][0-9]+')
);
当然,我对标识符的性质做了一个粗略的假设,您必须对标识符是否构成常规语言做出自己的判断


其次,@muistooshort所说的排序顺序有时被混淆地称为“自然排序”,只是为了给@muistooshort的答案增加几分钱。如果确定所需的ID将始终符合某个正则表达式,则可以通过检查约束强制执行该规则:

CREATE TABLE alphanumeric (
  id VARCHAR DEFAULT ('f' || nextval('seqtest') PRIMARY KEY,
  ...
  CHECK(id ~ '^[A-Za-z][0-9]+')
);
当然,我对标识符的性质做了一个粗略的假设,您必须对标识符是否构成常规语言做出自己的判断


其次,@muistooshort所说的排序顺序有时被混淆地称为“自然排序”,并且。

您将其转换为int,但它是文本。你不能那样做。从默认值中删除::integer。如果我取出typecast整数,则在创建它时会显示错误:列id的类型为integer,但默认表达式的类型为text提示:您需要重写或强制转换表达式。您将其强制转换为int,但它是text。你不能那样做。Remove::integer从默认值中删除。如果我取出typecast整数,在创建它时会显示错误错误:列id是integer类型,但默认表达式是text类型提示:您需要重写或强制转换表达式。是否可以将“f2”存储在integer类型中您不能这样做。时期不能将“f2”存储为整数,因为它不是整数。你不能把汽车存放在面包箱里。你不能把冰块储存在熔炉里。你不能把受伤的羊藏在狼窝里。你不能将“f2”存储在整数中。@DanielLyons:我也可以将a存储在面包盒中。@muistooshort是的,但你必须将其强制转换@缪斯托索特宾果!这很有趣。是否可以将“f2”存储为整数类型?你不能这样做。时期不能将“f2”存储为整数,因为它不是整数。你不能把汽车存放在面包箱里。你不能把冰块储存在熔炉里。你不能把受伤的羊藏在狼窝里。你不能将“f2”存储在整数中。@DanielLyons:我也可以将a存储在面包盒中。@muistooshort是的,但你必须将其强制转换@缪斯托索特宾果!这很有趣。
CREATE TABLE alphanumeric (
  id VARCHAR DEFAULT ('f' || nextval('seqtest') PRIMARY KEY,
  ...
  CHECK(id ~ '^[A-Za-z][0-9]+')
);