PHP preg функции нужен Ваш regex, который будет обернут с символом-разделителем, который может быть любым символом. Вы не можете использовать этот символ-разделитель, не выходя в regex. Это должно работать (здесь, символ-разделитель/):
preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', '2008-09-01 12:35:45');
// or this, to allow matching 0:00:00 time too.
preg_match('/\d{4}-\d{2}-\d{2} \d{1,2}:\d{2}:\d{2}/', '2008-09-01 12:35:45');
, Если необходимо соответствовать строкам, которые содержат только дату и время, добавьте ^ и $ вначале и конец regex.
preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', '2008-09-01 12:35:45');
ПРИМЕЧАНИЕ , если вы используете PostgreSQL 9.1 или новее и можете вносить изменения вне транзакции, см. этот ответ для более простого подхода.
У меня была такая же проблема несколько дней назад, и я нашел этот пост. Так что мой ответ может быть полезен для тех, кто ищет решение :)
Если у вас есть только один или два столбца, в которых используется тип перечисления, который вы хотите изменить, вы можете попробовать это. Также вы можете изменить порядок значений в новом типе.
-- 1. rename the enum type you want to change
alter type some_enum_type rename to _some_enum_type;
-- 2. create new type
create type some_enum_type as enum ('old', 'values', 'and', 'new', 'ones');
-- 3. rename column(s) which uses our enum type
alter table some_table rename column some_column to _some_column;
-- 4. add new column of new type
alter table some_table add some_column some_enum_type not null default 'new';
-- 5. copy values to the new column
update some_table set some_column = _some_column::text::some_enum_type;
-- 6. remove old column and type
alter table some_table drop column _some_column;
drop type _some_enum_type;
3-6 следует повторить, если столбцов больше 1.
Самый простой: избавиться от перечислений. Их нелегко изменить, и поэтому их следует очень редко использовать.
Заявление об ограничении ответственности: Я не пробовал это решение, поэтому оно может не сработать; -)
Вы должны посмотреть pg_enum
. Если вы хотите изменить только метку существующего ENUM, это сделает простое UPDATE.
Чтобы добавить новые значения ENUM:
pg_enum
. Если новое значение должно быть последним, все готово. pg_enum
в обратном порядке. Иллюстрация
У вас есть следующий набор меток:
ENUM ('enum1', 'enum2', 'enum3')
и вы хотите получить:
ENUM ('enum1', 'enum1b', 'enum2', 'enum3')
затем:
INSERT INTO pg_enum (OID, 'newenum3');
UPDATE TABLE SET enumvalue TO 'newenum3' WHERE enumvalue='enum3';
UPDATE TABLE SET enumvalue TO 'enum3' WHERE enumvalue='enum2';
затем:
UPDATE TABLE pg_enum SET name='enum1b' WHERE name='enum2' AND enumtypid=OID;
И так далее ...