電話番号の制約は7桁です。 SQL Serverで7桁かどうかを確認するにはどうすればよいですか?
CREATE TABLE Customer
(
C_ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
C_Name VARCHAR(255) NOT NULL,
Phone INT
);
電話番号を整数として保存しないでください。たとえば、いくつかの有効な数字は0で始まる可能性があります。今日ではないにしても、おそらく将来的には。検証チェックを行うには、like
を使用できます。
CREATE TABLE Customer (
C_ID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
C_Name VARCHAR(255) NOT NULL,
Phone CHAR(7), -- you might not want to have such a precise length
CONSTRAINT chk_phone CHECK (phone not like '%[^0-9]%') -- check that no number is not a digit
);
または、次のように書くこともできます。
CONSTRAINT chk_phone CHECK (phone like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]') -- check that no number is not a digit
電話番号はvarchar2またはchar typeとして保存することをお勧めします。 Oracleでは、電話番号の検証を次の方法で確認できます正規表現:
CREATE TABLE Customer
(
C_ID INT NOT NULL PRIMARY KEY,
C_Name VARCHAR(255) NOT NULL,
Phone char(10),
CONSTRAINT valid_phone_number
CHECK (REGEXP_LIKE(p_number, '^0\d{9}|\d{10}$'))
);
'^ 0\d {9} |\d {10} $'は、電話番号が数字0で始まる必要があることを意味します。次に、9桁または10桁が続きます(つまり、01646947314(11桁)または0123456789(10桁)は有効であり、123456789または0123456は無効です)。 「|」をドロップすると、このコードを7桁に変更できます。正規表現でd {7}に変更します。これがあなた(または他の誰かが同様の問題を抱えている)に役立つことを願っています!
学生用のテーブルがあるとしましょう。接点の長さを確認するために、次のコードが機能します。
ALTER TABLE Student ADD CONSTRAINT SD_CHK check(contact like '[0-9]*10');
これがあなたを助けるかもしれないことを願っています
phone VARCHAR CHECK(DATALENGTH(Phone)= 7)で動作しました
[〜#〜] nanp [〜#〜] によると、米国の7桁の電話番号はNXX-XXXXで、Nは2〜9、Xは0〜9です。さらに、2番目と3番目の番号を両方とも1にすることはできません。実際のNANP電話番号のみを保存する場合は、次の制約を使用できます。
ALTER TABLE Customer
ADD CONSTRAINT CHK_Phone_valid
CHECK (Phone >= 2000000 AND Phone <= 9999999 and Phone / 10000 % 100 <> 11)
市外局番を追加する場合は、bigintおよび異なる/追加の制約を使用する必要があります。さらに、内部電話番号、内線番号、市外局番、国際電話番号などの種類には、さまざまな要件があります。
データベースで多数の(NANPのみの)電話番号を頻繁に扱う人として、番号形式で保持するのが理想的であることがわかります。これは、より速く、より小さく、さまざまな形式の問題を防ぐという追加の利点があるためです。デフォルト。ほとんどのユーザーにとって、これはおそらくすべて議論の余地があります。