gpt4 book ai didi

oracle - 如何对任何变量应用约束,以便在 oracle 中只需要 5 个数字字符

转载 作者:行者123 更新时间:2023-12-04 05:58:55 24 4
gpt4 key购买 nike

假设我想创建表 ABC,其中有一列即 UniqueAddress。

我希望它应该需要 30 个字符,其中只需要 5 个数字字符。

它的正确查询是什么?

最佳答案

我认为这是对 translate 的调用,它看起来很吓人,但效果很好。我希望你的列已经只有 30 个字符,所以你不需要在约束中包含这个条件。

像下面这样的东西会起作用:

 alter table ABC
add constraint abc_unique_address_chk
check ( length(replace( translate( lower(unique_address)
,translate( lower(unique_address)
,'1234567890',' ')
,' ')
,' ')
) <= 5);

这会将列中的所有数字字符转换为空格或空字符,然后为您提供所有其他字符。然后,我使用此列表将所有非数字字符转换为空格或不转换,替换空格,然后剩下所有数字。
 SQL> create table abc ( unique_address varchar2(30));

Table created.

SQL>
SQL> alter table ABC
2 add constraint abc_unique_address_chk
3 check ( length(replace( translate( lower(unique_address)
4 ,translate( lower(unique_address)
5 ,'1234567890',' ')
6 ,' ')
7 ,' ')
8 ) <= 5);

Table altered.

SQL>
SQL> insert into abc values ( 'Hi, my name is Ben 12345');

1 row created.

SQL> commit;

Commit complete.

SQL> insert into abc values ( 'This has 6 numbers 12345');
insert into abc values ( 'This has 6 numbers 12345')
*
ERROR at line 1:
ORA-02290: check constraint (INBOUND.ABC_UNIQUE_ADDRESS_CHK) violated


SQL> commit;

Commit complete.

SQL>

关于oracle - 如何对任何变量应用约束,以便在 oracle 中只需要 5 个数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9173123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com