разница в sql между мускулем и постгреем.

antonim

Новичок
разница в sql между мускулем и постгреем.

К сожалению между мускулем и постгрее разница не только с построении базы и тапах данных, но и в комундах и функциях самого SQL.

Подскажите плз как корректно подправить для PG запрос:

UPDATE ban
SET status = 0
WHERE date_ban + INTERVAL amount_of_days DAY <= CURRENT_DATE
 

antonim

Новичок
умные люди, подскажите мне балбесу уже пол часа сижу над ерундой:

вот так работает:

UPDATE ban
SET status = 0
WHERE (date_ban + INTERVAL '1 DAY') <= current_date

а так нет:

UPDATE ban
SET status = 0
WHERE (date_ban + INTERVAL 'amount_of_days ::integer DAY') <= current_date

и так нет:

UPDATE ban
SET status = 0
WHERE (date_ban + INTERVAL 'amount_of_days DAY') <= current_date


amount_of_days - integer, подставляя любое друго поле unteger получаю ту же ошибку:

ERROR: invalid input syntax for type interval: "amount_of_days ::integer DAY"
 

Splurov

Новичок
Подозреваю, что date_ban + INTERVAL amount_of_days || ' day' прокатит

update: пробельчик добавил перед day
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: antonim
UPDATE ban
SET status = 0
WHERE date_ban + INTERVAL amount_of_days DAY <= CURRENT_DATE
В отличие от убогого мыскля, в постгресе есть полноценный тип interval, который описан в документации

В общем и целом примерно
Код:
+ (amount_of_days || ' days')::interval
-~{}~ 09.01.09 15:33:

Автор оригинала: antonim
UPDATE ban
SET status = 0
WHERE (date_ban + INTERVAL 'amount_of_days ::integer DAY') <= current_date

и так нет:

UPDATE ban
SET status = 0
WHERE (date_ban + INTERVAL 'amount_of_days DAY') <= current_date


amount_of_days - integer, подставляя любое друго поле unteger получаю ту же ошибку:

ERROR: invalid input syntax for type interval: "amount_of_days ::integer DAY"
не ну а чего ты ждёшь? что тебе значение поля будет внутри строки раскрываться, как в похапэ "{$amount_of_days} day"? Это не похапэ, это скуль.
 

antonim

Новичок
спасиб.

Помогите плз разобраться еще с одним запросом:

pg_query ("INSERT INTO book (name,year,ISBN,language,cover,link_to_file,link_to_azon,size,format,problem,date_add,id_moderator,genre)
VALUES ( '$name',$year,'$ISBN','$language','$cover','$link_to_file','$link_to_azon',$size,'$format','$problem',CURRENT_DATE,$id[0],$genre) ");

Ошибка: Query failed: ERROR: syntax error at or near "," LINE 2: VALUES ( 'kghj',,'','','','http://localhost/Mytest/B...

В базе все integer по умолчанию = 0

пробывыал убирать кавычки с переменных типа integer, тоже не помогает :( :(

-~{}~ 09.01.09 17:06:

сам разобрался. Проблдема была в том, что нельзя записывать "пустоту" в интеджер даже если по умолчанию стоит "0". В мускуле этой проблемы нет.
 

fixxxer

К.О.
Партнер клуба
mysql по умолчанию допускает вольности, если включить strict mode то тоже будет ошибка. postgresql всегда работает по стандарту.
 

antonim

Новичок
давно разобрался напишу для тех кому тоже надо:

нельзя в интеджер даже если он по умолчанию "0" записывать "NULL" или ниче не записывать он по умолчанию сделает "0" или записывать туда "0" нужно .. кароч проверку простую делать надо.
 
Сверху