Toon posts:

[ASP/SQL] Functie binnen SQL Query *

Pagina: 1
Acties:
  • 185 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Bij het aanmelden op een PHPBB forum wordt in het veld user_regdate als datum "May 28, 2002" ge-insert. Ik wil hierop sorteren voor bijv. de laatste 5 gebruikers die aangemeld zijn. Alleen kun je hier niet op sorteren omdat de maanden in letters zijn.

Bij Datum = "May 28, 2002" geeft de onderstaande functie de string "28-05-2002" terug. Hier kan ik dus op sorteren.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function Get_CorrectDateTime(Datum)
    Jaar = Right(Datum, 4)
    Dag = Trim(Left(Right(Datum, 8), 2))

    If InStr(Datum, "Jan") Then Maand = "01"
    If InStr(Datum, "Feb") Then Maand = "02"
    If InStr(Datum, "Mar") Then Maand = "03"
    If InStr(Datum, "Apr") Then Maand = "04"
    If InStr(Datum, "May") Then Maand = "05"
    If InStr(Datum, "Jun") Then Maand = "06"
    If InStr(Datum, "Jul") Then Maand = "07"
    If InStr(Datum, "Aug") Then Maand = "08"
    If InStr(Datum, "Sep") Then Maand = "09"
    If InStr(Datum, "Okt") Then Maand = "10"
    If InStr(Datum, "Nov") Then Maand = "11"
    If InStr(Datum, "Dec") Then Maand = "12"
    
    Get_CorrectDateTime = Dag & "-" & Maand & "-" & Jaar
End Function

Nu wil ik deze functie in een query aanroepen. Bijv:
code:
1
SELECT * FROM Users ORDER BY user_regdate;

maar user_regdate moet dus eerst door die functie heen want anders gaat de sortering echt niet goed!! Maar hoe :?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

In Oracle zou dat dat op deze manier gaan:
select datumfunctie(veld)
from tabel
order by datumfunctie(veld)

Probeer het eens :)

Who is John Galt?


Verwijderd

Topicstarter
code:
1
2
3
4
5
strSQL = 
"SELECT user_id,username," & Get_CorrectDateTime( & " user_regdate " &) &" 
FROM Users 
ORDER BY " & Get_CorrectDateTime( & " user_regdate " &) &" DESC 
LIMIT 0, 5;"

Zoiets misschien ???

Verwijderd

Topicstarter
Op maandag 25 februari 2002 15:16 schreef justmental het volgende:
In Oracle zou dat dat op deze manier gaan:
select datumfunctie(veld)
from tabel
order by datumfunctie(veld)

Probeer het eens :)
Ik kan niet gewoon die functie aanroepen want die is vb en dat werkt volgens mij niet onder een query.

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 11-09 10:38

Killemov

Ik zoek nog een mooi icooi =)

Welk DBMS gebruik je? In de meeste zitten nogal wat datumfuncties ingebakken. Zoiets als:
code:
1
select day(mydate)||'-'||month(mydate)||'-'||year(mydate) as newdate from ... where ... order by newdate

zou bij veel wat grotere dbms-en moeten werken. Wat veel dbms-en ook vaak hebben is een datum-presentatie functie of zelfs een datum-presentatie instelling.

Hey ... maar dan heb je ook wat!


  • tomato
  • Registratie: November 1999
  • Niet online
Gebruk gewoon datumfuncties van je database.

Verwijderd

Topicstarter
Ik spreek in ASP mbv MyODBC een MySQL database aan.

  • tomato
  • Registratie: November 1999
  • Niet online
DjMisterY: Ik spreek in ASP mbv MyODBC een MySQL database aan.
http://mysql.widexs.nl/doc/D/a/Date_and_time_functions.html

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 21:40

mulder

ik spuug op het trottoir

Verdiep je eens in (Date) Format ed.

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Bedankt voor die URL. Daar heb ik wel wat aan alleen gaat het een en ander nog niet goed..

Dit is nu mn query:
code:
1
SELECT user_id,username,DATE_FORMAT(user_regdate,'%d-%m-%Y') AS user_regdate FROM Users ORDER BY DATE_FORMAT(user_regdate,'%d-%m-%Y') DESC LIMIT 0, 5;

Dit voer ik uit en de waarden worden in een recordset geplaatst. Druk ik deze recordset af dan is het veld user_regdate leeg :?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13-09 12:14

Crazy D

I think we should take a look.

Wat voor datatype is user_regdate in de database?
Een beetje database heeft een date/time datatype, dus ik neem aan dat MySql dat ook wel heeft. Sorteren daarop hoort dan gewoon goed te gaan...

Exact expert nodig?


Verwijderd

Topicstarter
user_regdate = varchar(20)

Dit is standaard phpBB..

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Op maandag 25 februari 2002 16:22 schreef DjMisterY het volgende:
user_regdate = varchar(20)

Dit is standaard phpBB..
waarom zou je een datum in een varchar veld willen plaatsen. Zo onstaan de problemen vanzelf.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 25 februari 2002 16:11 schreef DjMisterY het volgende:
Bedankt voor die URL. Daar heb ik wel wat aan alleen gaat het een en ander nog niet goed..

Dit is nu mn query:
code:
1
SELECT user_id,username,DATE_FORMAT(user_regdate,'%d-%m-%Y') AS user_regdate FROM Users ORDER BY DATE_FORMAT(user_regdate,'%d-%m-%Y') DESC LIMIT 0, 5;

Dit voer ik uit en de waarden worden in een recordset geplaatst. Druk ik deze recordset af dan is het veld user_regdate leeg :?
Wellicht moet je je alias ook in de order by gebruiken.
dus :
code:
1
SELECT user_id,username,DATE_FORMAT(user_regdate,'%d-%m-%Y') AS user_regdate FROM Users ORDER BY user_regdate DESC LIMIT 0, 5;

edit:
Wellicht is het ook handig om je alias niet gelijk aan de kolomnaam te maken

Who is John Galt?


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13-09 12:14

Crazy D

I think we should take a look.

Op maandag 25 februari 2002 16:56 schreef Goodielover het volgende:
waarom zou je een datum in een varchar veld willen plaatsen. Zo onstaan de problemen vanzelf.
Exactly my thought. Ik zou zeggen, maar er in de db een fijn datum-veld van, hack de code van het forum zodat ie met het veld omgaat als zijnde een echt datum-veld en je problemen verdwijnen als sneeuw voor de zon :) (en 't is in de praktijk ook wel wat gebruikelijker om een datum-veld voor een datum te gebruiken :)

Exact expert nodig?


Verwijderd

Topicstarter
Het gaat om de laatste 5 aanmeldingen dus nu selecteer ik voorlopig op id want die is autonummering dus dan gaat het ook wel goed :)

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Mietje. Ik zie dat zo vaak hier op het forum. "Het hoeft niet mooi te zijn als het maar werkt" "Ach wat maakt de lay-out van een statement nou uit, hij doet het toch"

Als ik een zwarte lijst van zulke posters zou maken, mag ik er wel een database voor opzetten, want op papier is het bijna niet meer bij te houden

Verwijderd

Topicstarter
Op vrijdag 01 maart 2002 15:15 schreef Goodielover het volgende:
Mietje. Ik zie dat zo vaak hier op het forum. "Het hoeft niet mooi te zijn als het maar werkt" "Ach wat maakt de lay-out van een statement nou uit, hij doet het toch"

Als ik een zwarte lijst van zulke posters zou maken, mag ik er wel een database voor opzetten, want op papier is het bijna niet meer bij te houden
vroeg ik dat ??? nee toch....?? :r

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13-09 12:14

Crazy D

I think we should take a look.

Op vrijdag 01 maart 2002 19:53 schreef DjMisterY het volgende:
vroeg ik dat ??? nee toch....?? :r
Volgens mij is dat een welgemeend advies, om niet alleen te focussen op het eindresultaat, maar ook de weg er naartoe een beetje netjes aan te leggen.
Mjah anders kom je er over een half jaar wel achter als je weer eens de code inkijkt :P ;)

Exact expert nodig?


Verwijderd

Topicstarter
Ok ok...dat is ook weer waar. Mn code van een jaar geleden is nu ook om te :'(
Pagina: 1