2017-02-22 14 views
-1

Im пытается создать таблицу с атрибутом (который является первичным ключом), который допускает только CHAR (9) или ПУСТОЙ ЗНАЧЕНИЕ (пустая строка ''), как показано ниже:Вставить пустое значение в CHAR, SQL

create table person(
number CHAR (9) CHECK (number SIMILAR TO '[0-9]{2}-[0-9]{6}' OR number LIKE '_%') 
); 

Также я попробовал его с ПОДОБНЫХ к для обоих условий

create table person(
    number CHAR (9) CHECK (number SIMILAR TO '[0-9]{2}-[0-9]{6}' OR number SIMILAR TO '_%') 
    ); 

, но оба пути не работают

ответ

0

Это одно из тех, что вы хотите?

col CHAR(9) CHECK (col SIMILAR TO '[0-9]{2}-[0-9]{6}' OR col = '') 
col CHAR(9) CHECK (col SIMILAR TO '[0-9]{2}-[0-9]{6}' OR col IS NULL) 

(«число» это ужасное имя для строкового значения.)

Поскольку вы объявили столбец как CHAR() вам нужны слоты для всех персонажей. В вашем шаблоне есть 9 символов. Я не уверен, что означает «пустое значение», но все пробелы или NULL кажутся разумными. Поскольку значение CHAR() имеет фиксированную длину, пустая строка ('') заполняется пробелами по всей длине.

+0

Не должно быть 'ИЛИ trim (col) = '''? –

+0

ohhh ваше право .. char (9) из-за тире. я использовал число как CHAR, чтобы я мог применить ограничение, чтобы получить такой формат (xx-xxxxxx), и то, что я подразумеваю под пустым значением, похоже на это ('') или пустую строку, поскольку они называют это – Sam

+0

Спасибо, что это работает – Sam