Привет всем! Есть вопрос.
У меня:
Postgesql 8.3.X
create table proba (id integer primary key, test date);
insert into proba values (1,'2010-10-10');
Задача:
Изменить дату в строке с индексом id=1. А конкретнее только год в этой дате.
Посмотрел документацию, понял, что можно только извлекать определенные куски из даты. Например date_part('year',test);
ЗЫ. Очень нужно, помогите.
В общем нашел решение, но это
В общем нашел решение, но это более похоже не на решение, а на ТАКОЙ КОСТЫЛЬ....
update proba set test=to_date(('2000'::text || '-'::text || date_part('month',test)::text || '-'::text || date_part('day',test)::text),'YYYY-MM-DD') where id=1;
Если есть более правильный способ, подскажите пожалуйста. Охото правильно использовать возможности субд.
Вопрос на засыпку - а не
Вопрос на засыпку - а не удобней ли хранить отдельно год и отдельно месяц и день? Соответственно при запросе сводить их вместе в дату? Вам, конечно, видней как у вас будет работать бизнес-логика, поэтому просто спрашиваю, а не рекомендую.
Можно даже оставить дату как есть и добавить поле год. Тогда во всяком случае будет проще изменить дату - вычесть год, который есть в другом поле и добавить нужный год.
Тогда вопрос на засыпку от
Тогда вопрос на засыпку от меня: "Смысл тогда от существования type date"?
Не в обиду. Просто логично использовать то, что для этого предназначено.
Так есть другой вариант или это единственный возможный?
Смысл в том, чтобы работать с
Смысл в том, чтобы работать с датой как с датой, а не с текстовым полем, состоящим из 3-х субполей.
Дата - это вообще-то число, хранящее количество секунд. Сразу становится понятным, что "изменить год" в этом ключе нетривиальная задача. Другое дело - добавить интервал, вычесть интервал, определить вхождение даты, вычесть одну дату из другой.
Если же вы хотите странного, то и решение будет странное, чего же тут удивительного?
Можно, конечно оптимальней написать:
Но смысл останется тот же.
Попробуйте такой вариант
Попробуйте такой вариант
SELECT ('2010-02-03'::date-age('2010-02-03','2008-02-03'))::date
предполагается, значение поля '2010-02-03', необходимо изменить год на 2008
Спасибо за совет, но тут
Спасибо за совет, но тут фишка в том, что только год может меняться. По этом я взял Ваш пример и пример Admin, а на выходе получил вот, что
Извеняюсь, что сразу не
Извеняюсь, что сразу не написал, но мне еще необходимо хранить время кроме самой даты. По этому и было использовано данное поле.