表employees下有一個phoneNumber的欄位,型別為varchar(12),要求添加約束條件使其只能為數字字符,又因為電話號碼有座機號碼和手機號碼,因此長度不固定
如:
'15012341234','4161123' 能正確添加
添加'4161123a','a4161123','aaaaaaa','4161a123',15012341234均會顯示違反約束條件
百度上有人的解法是 check(phoneNumber not like '%[^0-9]%') 但是實際添加含有字母的字串也能成功添加,請問應該如何實作

在sqlplus實作的
uj5u.com熱心網友回復:
SQL>
SQL> create table test(ph varchar(20));
Table created
SQL> alter table test add constraint ck_test check(not regexp_like(ph, '[^0-9]'));
Table altered
SQL> insert into test values('111111');
1 row inserted
SQL> insert into test values('A1111');
insert into test values('A1111')
ORA-02290: 違反檢查約束條件 (ORACLE.CK_TEST)
SQL> insert into test values('ABC');
insert into test values('ABC')
ORA-02290: 違反檢查約束條件 (ORACLE.CK_TEST)
SQL> insert into test values('111A');
insert into test values('111A')
ORA-02290: 違反檢查約束條件 (ORACLE.CK_TEST)
SQL> insert into test values('111AA111');
insert into test values('111AA111')
ORA-02290: 違反檢查約束條件 (ORACLE.CK_TEST)
SQL> insert into test values('中國人民');
insert into test values('中國人民')
ORA-02290: 違反檢查約束條件 (ORACLE.CK_TEST)
SQL> select * from test;
PH
--------------------
111111
SQL> drop table test purge;
Table dropped
SQL>
uj5u.com熱心網友回復:
為什么 不是 not regexp_like(ph, '[^0-9]+') 一個或多個?
[^0-9]不是第一位為非數字嗎?
uj5u.com熱心網友回復:
^ 第一位
[^] 中括號里是非操作
加不加那個+一樣,有數字以外就不行唄
uj5u.com熱心網友回復:
請問在mysql中怎么實作呢uj5u.com熱心網友回復:
學習一下。。。正在學SQLuj5u.com熱心網友回復:
正則運算式。。。。學習了轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/22935.html
標籤:基礎和管理
上一篇:imp匯入備份實體問題
