我是sql的新手,在创建表时,有没有方法可以检查/强制第一个字母始终是字母表?例如<alphabet><numbers>
例如,
CREATE TABLE TESTING
(
TestID VARCHAR(6),
CONSTRAINT TestPK PRIMARY KEY (TestID)
);
当将新数据插入TESTING
表时,它应该是T12345
,并且如果输入是12345
,则会提示错误。例如?
我有几个表,每个表都有自己的ID(6位数(,因此,我认为给它们一个字母表前缀会更容易(例如,如果是客户表,它将是C等(,这样我就可以更清晰地显示我的表/内容。。。因此,使用的数据类型是VARCHAR,因为它是一个字母数字值,而不是我最初使用的INT。
使用REGEXP_LIKE()
为TestID
:添加约束
CREATE TABLE TESTING
(
TestID VARCHAR(6),
CONSTRAINT TestPK PRIMARY KEY (TestID),
CONSTRAINT first_letter CHECK (REGEXP_LIKE(TestID, '^[A-Za-z]'))
);
如果你想让第一个字符是大写字母,那么它更简单:
CREATE TABLE TESTING
(
TestID VARCHAR(6),
CONSTRAINT TestPK PRIMARY KEY (TestID),
CONSTRAINT first_letter CHECK (REGEXP_LIKE(TestID, '^[A-Z]'))
);
我有几个表,每个表都有自己的ID(6位数字(,因此,我认为给它们一个字母表前缀会更容易(例如,如果是Customer表,它将是C等(,这样我就可以更清晰地显示我的表/内容。
作为一个帧挑战,您最好不要使用这种方法,并将ID
保留为NUMBER
数据类型,然后如果您想要前缀,则在显示值时添加它:
CREATE TABLE customer
(
ID NUMBER(6,0) CONSTRAINT customer_id_pk PRIMARY KEY
);
如果你有数据:
INSERT INTO customer ( id )
SELECT 1 FROM DUAL UNION ALL
SELECT 123456 FROM DUAL;
然后,当您想要DISPLAY数据时,使用前缀对其进行格式化
SELECT 'C' || TO_CHAR( id, 'FM000000' ) AS id
FROM customer;
输出:
|ID||:------||C000001||C123456|
如果需要,可以将其作为生成列添加到表中:
ALTER TABLE customer ADD (
FORMATTED_ID VARCHAR2(7)
GENERATED ALWAYS AS ( 'C' || CAST( TO_CHAR( id, 'FM000000' ) AS VARCHAR(6) ) )
);
然后:
SELECT * FROM customer;
输出:
ID|FORMATED_ID-----:|:-----------1|C000001123456|C123456
db<gt;小提琴这里
这是添加到MTO答案中。我认为你想做的事情根本没有必要。这个数字很好。为什么?
您为列选择了一个很好的命名约定——<entity name>ID
。因此,当您查看查询的结果时,您将得到一列TestID
。这是来自Test
表的id。
使用已使用的命名约定解决了问题。