[MySQL] Probleem met opvragen data (dmv between en >< )

Pagina: 1
Acties:

  • InterCC
  • Registratie: April 2000
  • Laatst online: 08-02 12:39
Om periodieke resultaten op te vragen (kwartaal, halfjaars, dat ligt eraan) wil ik wat simpele gegevens opvragen die tussen bepaalde data vallen. Het lukt alleen nu al 2 uur niet en ik raak het overzicht nogal kwijt. Ik ben op w3schools geweest en ook heb ik sql.com bezocht voor voorbeelden. Daarnaast heb ik natuurlijk mijn computervriend google geraadpleegd om me op fora te wijzen met mensen die een zelfde probleem hebben. Echter, net als op tweakers zijn die programma´s vaak iets uitgebreider dan het simpele wat ik wil en is de vergelijking al niet weg.

Mijn code is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT 
  `Client`.`Client_name`,
  `Program`.`Program_name`,
  `Screening`.`Screener_sent`
FROM
  `Client`,
  `Program`,
  `Screening`
WHERE
  (`Client`.`Client_id` = `Screening`.`Client_id`) AND 
  (`Screening`.`Program_id` = `Program`.`Program_id`) AND 
  (`Screener_sent` BETWEEN 01 / 01 / 2004 AND 01 / 06 / 2009)


De data vallen allemaal in 2006,omdat het een nieuwe database is waar nog veel meer ingezet moet worden, maar zelfs met vele jaren speling lukt het niet. De cel "screener_sent" is gedefineerd als datum, dat zou dus geen probleem mogen zijn.

Wanneer ik de laatste regel verander naar:
code:
1
2
(`Screener_sent`  >  01 / 01 / 2004) AND
(`Screener_sent` <  01 / 06 / 2009)


Krijg ik geen enkel resultaat terug.. Ik denk dat het probleem niet lastig is, maar waar ik eerst vol moed opzoek ging naar een oplossing zie ik nu geen oplossing meer...

  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 22-01 11:22

Hermanvh

webOS fan, hacker, developer

Wat voor database gebruik je?

webOS all the way!


  • InterCC
  • Registratie: April 2000
  • Laatst online: 08-02 12:39
EMS MySQL Manager als programma, maar de exacte database durf ik niet te zeggen, omdat ik slechts een account gekregen heb op de server om voor dit bedrijf een database aan te maken (dat is niet mijn normale werkzaamheid, maar omdat het nodig is en ik een klein beetje kennis heb, heb ik aangeboden dat te doen).

De eigenaar van de server kennende is het waarschijnlijk een database gebaseerd op linux, maar verder durf ik er geen uitspraken over te doen.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Hoe moet SQL weten dat 01 / 01 / 2004 een datum is, en niet het getal 1 gedeeld door 2004? Je database ziet het als een getal, een berekening. Afhankelijk van je DBMS moet je aangeven dat het om een datum gaat. In Access doe je dat (geloof ik) door er ## omheen te zetten, en in MySQL voer je het gewoon in als string. Overigens is het gangbare formaat bij het invoeren van datums in de database nog altijd yyyy-mm-dd. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • InterCC
  • Registratie: April 2000
  • Laatst online: 08-02 12:39
De kolom screener_sent is ingesteld als datum, zelfs wanneer ik 2006/25/5 invul maakt het programma er onmiddelijk zelf 05/25/2006 van.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Dat ligt aan het programma dat de data weergeeft: die formatteert het zelf voor je. Maar hoe weet MySQL nu of je 12 januari bedoelt of 1 december als je 12-1-2006 invult? Als je netjes yyyy-mm-dd als volgorde neemt gaat het niet snel fout. ;)

En werkte die oplossing van me nou of niet? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • InterCC
  • Registratie: April 2000
  • Laatst online: 08-02 12:39
Ik moet bekennen dat ik niet precies weet wat voor een string jij nu bedoelt. Ook heb ik eigenlijk geen optie om de datum anders in te voeren, want gegevens zijn dan wel gedefineerd als datum, maar ik kan verder in dit programma geen eigenschappen aan de datum veranderen..

  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 22-01 11:22

Hermanvh

webOS fan, hacker, developer

Gewoon een ' of " voor en na de datum neerzetten. Dus "01-01-2004"

webOS all the way!


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Hermanvh schreef op vrijdag 26 mei 2006 @ 13:50:
Gewoon een ' of " voor en na de datum neerzetten. Dus "01-01-2004"
in MySQL gebruik je 'single quotes' voor strings :)

  • InterCC
  • Registratie: April 2000
  • Laatst online: 08-02 12:39
Ah, sorry, natuurlijk. Met zowel enkel als dubbel krijg ik geen waardes terug..

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Dan nog zou ik de raad van NME ter harte nemen en de datum in de query neerzetten als '2006-06-01' als je over 1 juni 2006 praat.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Dan is er blijkbaar geen enkel record dat voldoet aan je join en aan die periode. Je query lijkt verder in orde maar een echt oordeel kunnen we daarover niet vellen zonder datamodel.
Erkens schreef op vrijdag 26 mei 2006 @ 13:51:
[...]

in MySQL gebruik je 'single quotes' voor strings :)
Dubbele quotes worden AFAIK ook volledig ondersteund? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • InterCC
  • Registratie: April 2000
  • Laatst online: 08-02 12:39
Dank uuuuuuuu, yyyy/mm/dd in de query zetten is idd de oplossing. Logisch vind ik het niet, doordat het programma het heel anders accepteerd en het niet omzet naar voor de server begrijpelijk (nouja, in de tabellen wel, maar in de query niet), maar ik ben blij dat het werkt! Net voor de lunch :)

De nu goede code is, voor de duidelijkheid:

code:
1
`Screener_sent` BETWEEN '2006/03/28' AND '2006/03/28'

[ Voor 4% gewijzigd door InterCC op 26-05-2006 14:06 ]


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

-NMe- schreef op vrijdag 26 mei 2006 @ 14:01:
Dubbele quotes worden AFAIK ook volledig ondersteund? :)
klopt, echter de voorkeur ligt bij de single quote.

En bovendien:
If the ANSI_QUOTES SQL mode is enabled, string literals can be quoted only within single quotes because a string quoted within double quotes is interpreted as an identifier.
Pagina: 1