Das kannst Du mit select version(); anzeigen. Aber ich gehe nicht davon aus, dass ihr eine Version an der Uni verwendet, die noch gar nicht released worden ist.
Mit Deiner Tabelle geht das eigentlich ganz einfach:
postgres=> create table betriebe (name text, tag integer, gueltigvon date, gueltigbis date, uhrvon time, uhrbis time);
CREATE TABLE
postgres=> insert into betriebe
postgres-> values
postgres-> ('betrieb A', 6, DATE '01.03.2012', date '31.12.2012', time '10:00 ', time '22:00'),
postgres-> ('betrieb A', 0, DATE '01.03.2012', date '31.12.2012', time '14:00 ', time '22:00'),
postgres-> ('betrieb A', 1, DATE '01.04.2012', date '15.11.2012', time '14:00 ', time '22:00'),
postgres-> ('betrieb A', 2, DATE '01.04.2012', date '15.11.2012', time '14:00 ', time '22:00'),
postgres-> ('betrieb A', 3, DATE '01.04.2012', date '15.11.2012', time '14:00 ', time '22:00');
INSERT 0 5
postgres=> commit;
COMMIT
postgres=> select current_timestamp as "Jetzt", name, tag, uhrvon, uhrbis
postgres-> from betriebe
postgres-> where current_date between gueltigvon and gueltigbis
postgres-> and current_time between uhrvon and uhrbis
postgres-> and extract(dow from current_date) = tag;
Jetzt | name | tag | uhrvon | uhrbis
----------------------------+-----------+-----+----------+----------
2012-08-04 11:21:51.656+02 | betrieb A | 6 | 10:00:00 | 22:00:00
(1 row)
postgres=>
Der einzige Unterschied zu Deiner Tabelle ist, dass ich den Wochentag als Nummer erwarte. Der Ausdruck extract(dow from current_date) liefert nämlich 0 für Sonntag, 1 für Montag usw. zurück. Wenn Du SO, MO, … in der Tabelle drin lassen willst musst Du das ein wenig umständlicher machen:
postgres=> create table betriebe (name text, tag text, gueltigvon date, gueltigbis date, uhrvon time, uhrbis time);
CREATE TABLE
postgres=>
postgres=> insert into betriebe
postgres-> values
postgres-> ('betrieb A', 'SA', DATE '01.03.2012', date '31.12.2012', time '10:00 ', time '22:00'),
postgres-> ('betrieb A', 'SO', DATE '01.03.2012', date '31.12.2012', time '14:00 ', time '22:00'),
postgres-> ('betrieb A', 'MO', DATE '01.04.2012', date '15.11.2012', time '14:00 ', time '22:00'),
postgres-> ('betrieb A', 'DI', DATE '01.04.2012', date '15.11.2012', time '14:00 ', time '22:00'),
postgres-> ('betrieb A', 'MI', DATE '01.04.2012', date '15.11.2012', time '14:00 ', time '22:00');
INSERT 0 5
postgres=>
postgres=> create table betriebe (name text, tag text, gueltigvon date, gueltigbis date, uhrvon time, uhrbis time);
CREATE TABLE
postgres=>
postgres=> insert into betriebe
postgres-> values
postgres-> ('betrieb A', 'SA', DATE '01.03.2012', date '31.12.2012', time '10:00 ', time '22:00'),
postgres-> ('betrieb A', 'SO', DATE '01.03.2012', date '31.12.2012', time '14:00 ', time '22:00'),
postgres-> ('betrieb A', 'MO', DATE '01.04.2012', date '15.11.2012', time '14:00 ', time '22:00'),
postgres-> ('betrieb A', 'DI', DATE '01.04.2012', date '15.11.2012', time '14:00 ', time '22:00'),
postgres-> ('betrieb A', 'MI', DATE '01.04.2012', date '15.11.2012', time '14:00 ', time '22:00');
INSERT 0 5
postgres=>
postgres=> select current_timestamp as "Jetzt", name, tag, uhrvon, uhrbis
postgres-> from betriebe
postgres-> where current_date between gueltigvon and gueltigbis
postgres-> and current_time between uhrvon and uhrbis
postgres-> and tag = case extract(dow from current_date)
postgres-> when 0 then 'SO'
postgres-> when 1 then 'MO'
postgres-> when 2 then 'DI'
postgres-> when 3 then 'MI'
postgres-> when 4 then 'DO'
postgres-> when 5 then 'FR'
postgres-> when 6 then 'SA'
postgres-> end;
Jetzt | name | tag | uhrvon | uhrbis
----------------------------+-----------+-----+----------+----------
2012-08-04 11:24:50.546+02 | betrieb A | SA | 10:00:00 | 22:00:00
(1 row)
postgres=>
also ich bin immer daran gehangen wie ich die aktuelle zeit auslese mit tag, monat und jahr
Siehe current_date, current_time und current_timestamp
Mehr Informationen dazu finden sich im Handbuch: PostgreSQL: Documentation: 9.1: Date/Time Functions and Operators