web-dev-qa-db-ja.com

SQLServerの電話番号の制約

電話番号の制約は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 
);
4
Serena Gale

電話番号を整数として保存しないでください。たとえば、いくつかの有効な数字は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 
5
Gordon Linoff

電話番号は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}に変更します。これがあなた(または他の誰かが同様の問題を抱えている)に役立つことを願っています!

0
Bien Do

学生用のテーブルがあるとしましょう。接点の長さを確認するために、次のコードが機能します。

ALTER TABLE Student ADD CONSTRAINT SD_CHK check(contact like '[0-9]*10');

これがあなたを助けるかもしれないことを願っています

0
YASH OSWAL

phone VARCHAR CHECK(DATALENGTH(Phone)= 7)で動作しました

0
Serena Gale

[〜#〜] 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のみの)電話番号を頻繁に扱う人として、番号形式で保持するのが理想的であることがわかります。これは、より速く、より小さく、さまざまな形式の問題を防ぐという追加の利点があるためです。デフォルト。ほとんどのユーザーにとって、これはおそらくすべて議論の余地があります。

0
Paul