Datum
In een db heb ik de datum weggescheven "Y-m-d H:i:s"
Maar hoe krijg ik nu alles met een bepaalde datum er weer uit?
Dus zonder de H:i:s
Gewijzigd op 01/01/1970 01:00:00 door Rob Smit
of met opmaak:
Of uitgebreid met dag- en maandnamen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
CONCAT(
ELT(DAYOFWEEK(datum),
'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'
),
' ',
DAYOFMONTH(datum),
' ',
ELT(MONTH(datum),
'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'
),
' ',
YEAR(datum)
) AS newDate
FROM
tabelnaam
CONCAT(
ELT(DAYOFWEEK(datum),
'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'
),
' ',
DAYOFMONTH(datum),
' ',
ELT(MONTH(datum),
'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'
),
' ',
YEAR(datum)
) AS newDate
FROM
tabelnaam
Mogelijkheden genoeg!
Edit:
En natuurlijk de WHERE niet vergeten...
Gewijzigd op 01/01/1970 01:00:00 door Frank -
En gaat dat hetzelfde in PostreSQL of kan het daarin nog 10 x beter en 10 x makkelijker en 10 x sneller :-P
edit: het is een retorische vraag (ik zeg het maar even, heb het niet meer zo hoog met 12 jarigen genaamd Boris) en het is bedoeld om jouw er even op te attenderen dat je weer je postcount met nutteloze posts zit op te hogen en daarmee het forum zit te bekladderen met onnodige zooi. Want dit is niet het eerste topic vandaag waar ik jouw zo'n reactie zie plaatsen. Maar genoeg, wees jezelf, irriteer anderen, en ga vooral zo door...
edit2, om te voorkomen dat dit topic omhoog klimt: Waarom moet jij PostgreSQL verdedigen? Het komt bij mij meer over als reclame maken...
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Edit:
Mijne is namelijk een poging tot verdieping in PostgreSQL.
Gewijzigd op 01/01/1970 01:00:00 door K i p
de handleiding voor de datum- en tijdfuncties van PostgreSQL. Voor het gebruik van de dag- en maandnamen schrijf je een aparte functie (in PostgreSQL) die je dan vanuit iedere gewenste query kunt aanroepen voor het omzetten van de datum. Scheelt je weer een hoop werk! Zie PHPFreakz voor een voorbeeldje.
De functie CONCAT() kun je vergeten, daar beschikt PostgreSQL niet over. Maar dat hoeft ook niet, PostgreSQL gebruikt gewoon de SQL-standaard || om 2 waardes aan elkaar te plakken.
De functie CONCAT() van MySQL slaat dus helemaal nergens op en is niet meer dan een lapmiddel.
En kijk ook eens naar de functie AGE() om een leeftijd te berekenen. Hier op PHPhulp heb ik regelmatig vragen voorbij zien komen hoe je dat in MySQL en/of php kunt oplossen.
Stukje uit de handleiding:
Om toch even serieus op de vraag van Boris in te gaan: Zie De functie CONCAT() kun je vergeten, daar beschikt PostgreSQL niet over. Maar dat hoeft ook niet, PostgreSQL gebruikt gewoon de SQL-standaard || om 2 waardes aan elkaar te plakken.
De functie CONCAT() van MySQL slaat dus helemaal nergens op en is niet meer dan een lapmiddel.
En kijk ook eens naar de functie AGE() om een leeftijd te berekenen. Hier op PHPhulp heb ik regelmatig vragen voorbij zien komen hoe je dat in MySQL en/of php kunt oplossen.
Stukje uit de handleiding:
Quote:
century
The century
SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
Result: 20
SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 21
The first century starts at 0001-01-01 00:00:00 AD, although they did not know it at the time. This definition applies to all Gregorian calendar countries. There is no century number 0, you go from -1 to 1. If you disagree with this, please write your complaint to: Pope, Cathedral Saint-Peter of Roma, Vatican.
The century
SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
Result: 20
SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 21
The first century starts at 0001-01-01 00:00:00 AD, although they did not know it at the time. This definition applies to all Gregorian calendar countries. There is no century number 0, you go from -1 to 1. If you disagree with this, please write your complaint to: Pope, Cathedral Saint-Peter of Roma, Vatican.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE OR REPLACE FUNCTION datum_nl( "timestamp")
RETURNS text AS
$BODY$
DECLARE
datum text;
maanden varchar[12] := ARRAY['januari','februari','maart','april','mei','juni','juli','augustus','september','oktober','november','december'];
BEGIN
datum :=
TO_CHAR($1, 'DD') ||' '||
maanden[extract(month FROM $1)] ||' '||
TO_CHAR ($1, 'YYYY');
RETURN datum;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
RETURNS text AS
$BODY$
DECLARE
datum text;
maanden varchar[12] := ARRAY['januari','februari','maart','april','mei','juni','juli','augustus','september','oktober','november','december'];
BEGIN
datum :=
TO_CHAR($1, 'DD') ||' '||
maanden[extract(month FROM $1)] ||' '||
TO_CHAR ($1, 'YYYY');
RETURN datum;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
Deze functie kun je vanuit andere functies aanroepen, maar ook vanuit een simpele SELECT-query:
I.p.v. tig-keer min-of-meer dezelfde SQL-code in te kloppen gebruik je nu overal de functie datum_nl om datums op te maken.
Grappig. Sla je die functie dan op in je database ofzo? Ik vind het ook best rare syntax.
Het enige wat ik wou weten was wat ik moet invullen op de plek van de ?????
in bv.
$vandaag=mysql_num_rows(mysql_query("SELECT reacties_ID FROM reacties WHERE reactie_datum= ????????"));
om bv. het aantal reacties van vandaag te zien.
En als we dan toch bezig zijn, hoe maak ik er gisteren van?
Gewijzigd op 01/01/1970 01:00:00 door Rob Smit
Gisteren:
Hij werkt
Op de localhost ben ik aan het testten geweest en daar heb ik tijdens het testen in de db datetime even als test verandert in date. Later weer terug gezet. Met deze constructie telt hij echte alleen de data waar de H:i:s op 0 staan. Ik wil die H:i:s gegevens in een later stadium nog wel gebruiken dus wil ik het nog niet weghalen.
Hoe kan ik er voor zorgen dat hij deze toch telt?
Als je met een datetime werkt kun je CURDATE() vervangen door NOW(). De eerste geeft namelijk alleen een datum terwijl NOW() een tijdstip terug geeft.
Boris schreef op 20.01.2007 15:01:
Yep, deze functie staat ín de database, het wordt een database-functie. Het is dus géén record in de database!Grappig. Sla je die functie dan op in je database ofzo? Ik vind het ook best rare syntax.
Zie de handleiding hoe je met functies, procedures en triggers kunt werken.