WinFuture-Forum.de: Brauche Die Richtige Sql Anfrage - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Brauche Die Richtige Sql Anfrage Wochentag berechnen


#1 Mitglied ist offline   renegade2k 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.402
  • Beigetreten: 30. Juli 07
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Nähe D'dorf

geschrieben 28. Mai 2009 - 12:43

moin.

Ich hab da eine Aufgabe, über die ich mir den Kopf zerbreche, weil ich nicht den richtigen Befehlt finden kann.
Vorab: ich arbeite mit SQL-92

Aufgabe lautet, alle weiblichen Personen zu filtern, die am Montag geboren sind.

die Relation hat den folgenden Aufbau:
Person (personnr, nachname, vorname, geschlecht, kinderanzahl, grundgehalt, kinderzulage, unfallzahl, zustand, einstellung, geburtsdatum)

Geburtsdatum ist vom Typ DATE und ist im Format JJJJ-MM-TT

Nun ist klar, dass man anhand des Geburtsdatums den WOchentag errechnen muss, allerdings funtkionieren so Sachen wie DAYOFWEEK(***) und DATENAME(weekday , ***) nicht ... <_<

Kann mir jemand noch ein TIpp geben, wie ich das löse?

Dieser Beitrag wurde von renegade2k bearbeitet: 28. Mai 2009 - 12:59

- Vista x64 Multilanguage Update Pack : ist oben ;) -
0

Anzeige



#2 _lustiger_affe_

  • Gruppe: Gäste

geschrieben 28. Mai 2009 - 13:16

Montag wie der jeweils letzte/nächste Montag oder Montag allgemein? In welchem Format liegt das Datum vor?

Ist es für die Schule/Uni und muss entsprechend in SQL sein? Wenn nicht,
date +%A -d "2000-01-01"


Edit, etwas wie "extract weekday from date" müßte doch eigentlich gehen? Das lieferte zwar AFAIK nur 0-6 zurück, aber das würde ja reichen, wenn man die Abfrage entsprechend formuliert.

Dieser Beitrag wurde von lustiger_affe bearbeitet: 28. Mai 2009 - 13:21

0

#3 Mitglied ist offline   renegade2k 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.402
  • Beigetreten: 30. Juli 07
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Nähe D'dorf

geschrieben 28. Mai 2009 - 14:26

Das ganze muss in SQL sein, weil es von der Uni verlangt wird, deshalb auch der "alte"
92-er Standard.

Zitat

Edit, etwas wie "extract weekday from date" müßte doch eigentlich gehen? Das lieferte zwar AFAIK nur 0-6 zurück, aber das würde ja reichen, wenn man die Abfrage entsprechend formuliert.


Das hab ich auch bei google gefunden, aber alle Befehle, die ich durchprobiert habe, wurde nciht akzeptiert, weil sie entweder aus neueren SQL Standards kamen oder exklusiv auf Microsoft-Serversoftware verfügbar sind ...

ps: gesucht sind allgemein alle Personen, die Montags geboren wurden, wenn ich das richtig verstanden habe.

Dieser Beitrag wurde von renegade2k bearbeitet: 28. Mai 2009 - 14:27

- Vista x64 Multilanguage Update Pack : ist oben ;) -
0

#4 Mitglied ist offline   tavoc 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.446
  • Beigetreten: 22. Juli 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 28. Mai 2009 - 16:19

schau mal hier: http://www.ibphoenix.com/main.nfs?a=ibphoe..._60_sql_date_fs


SLECT * FROM Person WHERE geburtstag IN
(SELECT geburtstag FROM Person WHERE EXTRACT(WEEKDAY FROM geburtstag) =1;);


oder so ähnlich, habe grade keine DB hier, aber die Seite gibt es gutes Beispiel
your IP is 127.0.0.1 or ::1
you are running an OS
you use a Browser
I know so much about you...
0

#5 Mitglied ist offline   renegade2k 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.402
  • Beigetreten: 30. Juli 07
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Nähe D'dorf

geschrieben 28. Mai 2009 - 19:35

Beitrag anzeigenZitat (tavoc: 28.05.2009, 17:19)

schau mal hier: http://www.ibphoenix.com/main.nfs?a=ibphoe..._60_sql_date_fs


SLECT * FROM Person WHERE geburtstag IN
(SELECT geburtstag FROM Person WHERE EXTRACT(WEEKDAY FROM geburtstag) =1;);


oder so ähnlich, habe grade keine DB hier, aber die Seite gibt es gutes Beispiel


Jup, auf der Seite war ich auch. Hab ein paar Befehle durchprobiert, aber immer Fehlermeldung, so Wie z.B. bei der Anfrage von dir.
Hab sie mal "reduziert" um einfach zu testen, ob der befehl erkannt wird:
Anfrage:
SELECT geburtstag FROM Person WHERE EXTRACT(WEEKDAY FROM geburtstag) =1;

gab zurück:
timestamp units "weekday" not recognized

wobei "DAY" so funktioniert wie es soll.
Also die Funktion geht, der Teil mit weekday nicht ;)

Dieser Beitrag wurde von renegade2k bearbeitet: 28. Mai 2009 - 19:38

- Vista x64 Multilanguage Update Pack : ist oben ;) -
0

#6 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 28. Mai 2009 - 20:40

MySQL:  SELECT [select query etc here] WHERE DAYOFWEEK(event_date) = 3;
PostgreSQL: SELECT [select query etc here] WHERE EXTRACT(DOW FROM event_date) = 3;
Oracle: SELECT [select query etc here] WHERE TO_CHAR(event_date,'D') = '3';

Ist TO_CHAR SQL-Standard? Dann könnte das womöglich helfen.
0

#7 Mitglied ist offline   renegade2k 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.402
  • Beigetreten: 30. Juli 07
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Nähe D'dorf

geschrieben 28. Mai 2009 - 21:23

Beitrag anzeigenZitat (Witi: 28.05.2009, 21:40)

MySQL:  SELECT [select query etc here] WHERE DAYOFWEEK(event_date) = 3;
PostgreSQL: SELECT [select query etc here] WHERE EXTRACT(DOW FROM event_date) = 3;
Oracle: SELECT [select query etc here] WHERE TO_CHAR(event_date,'D') = '3';

Ist TO_CHAR SQL-Standard? Dann könnte das womöglich helfen.


zu 1.:
function dayofweek(date) does not exist

zu 2.:
JUHU ;)
Hab jetzt SELECT * FROM Person ... femacht und er spuckt mir zumindest mal die Tabelle aus, also macht schonmal kein fehler. Nu werd ich versuchen, ob die Lösung so auch stimmt ;)

EDIT: mit Tag = "1" wurde die Lösung als richtig anerkannt. Dankeschön :P

Dieser Beitrag wurde von renegade2k bearbeitet: 28. Mai 2009 - 21:25

- Vista x64 Multilanguage Update Pack : ist oben ;) -
0

#8 Mitglied ist offline   renegade2k 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.402
  • Beigetreten: 30. Juli 07
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Nähe D'dorf

geschrieben 31. Mai 2009 - 12:13

Hab da nochmal eine Frage:

Ich soll Personen zurückgeben, die älter als 30 Jahre sind.
Dazu soll ich den Befehlt "age()" benutzen.
Soweit sogut, ich gebe ein
... age(geburtstag) ...
und kriege das Alter in Jahren, Monaten, Tage, Stunden ... zurückgegeben. nun sag ich aber
... age(geburtstag) > '30' ...
und kriege aber immernoch alles von 20 bis 300 Jahre zurückgegeben.
Was mach ich falsch?
- Vista x64 Multilanguage Update Pack : ist oben ;) -
0

#9 Mitglied ist offline   tavoc 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.446
  • Beigetreten: 22. Juli 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 31. Mai 2009 - 12:38

wie ist denn die ausgabe genau von age, du müsstest einschränken das es nur jahre sind die ausgegeben werden. Oder du findest die Kombination von genau 30 Jahren raus.

Z.b. kann ja sein das der 02.04.1950 ausgeben wird als Jahre+tage+stunden als ein großer integer und das ist ja größer 30...
Müsste man die Syntax der FUnktion wissen.

Dieser Beitrag wurde von tavoc bearbeitet: 31. Mai 2009 - 12:41

your IP is 127.0.0.1 or ::1
you are running an OS
you use a Browser
I know so much about you...
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0