如何检查VARCHAR中的第一个字母是否始终是字母表



我是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。

使用已使用的命名约定解决了问题。

最新更新