Deel van string selecteren uit db-veld

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

George van Baasbank

George van Baasbank

15/07/2012 12:22:02
Quote Anchor link
Hallo allemaal,

Ik mijn tabel komt een veld voor dat een datum bevat in string-format, dus gewonen tekst. Nu wil ik, in mijn geval, de jarige van de dag selecteren op basis van dit datumveld. Helaas werkt de syntax van ondertsaande code niet.
Wie weet de juiste syntax? Het datumveld (geboortedatum) heet in mijn database <geboorte> en de inhoud is alsvolgt opgenomen dd-mm-jjjj oftewel 15-07-1948.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$cDag = date('d');
$cMaand = date('m');

$sql = "SELECT * FROM genealogie WHERE substr(geboorte,0,2) = '$cDag' AND substr(geboorte,3,2) = '$cMaand'";
$cResultJarig = mysql_query($sql);



George
Gewijzigd op 15/07/2012 12:22:55 door George van Baasbank
 
PHP hulp

PHP hulp

29/03/2024 08:45:12
 
Kumkwat Trender

Kumkwat Trender

15/07/2012 12:30:43
Quote Anchor link
waarom een substr?
 
George van Baasbank

George van Baasbank

15/07/2012 12:38:16
Quote Anchor link
Omdat mijn tabel gevoed wordt vanuit een download die geheel opgebouwd is als tekstvelden
 
- SanThe -

- SanThe -

15/07/2012 12:39:32
Quote Anchor link
$sql = "SELECT * FROM genealogie WHERE geboorte LIKE '".date('d-m')."%'";
 
George van Baasbank

George van Baasbank

15/07/2012 12:48:46
Quote Anchor link
SanThe,

De volgende melding kwam uit jouw query:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'd-m').&quot;%' LIMIT 0, 30' at line 1
 
- SanThe -

- SanThe -

15/07/2012 12:53:56
Quote Anchor link
Je hebt het wel compleet overgenomen? Met date('d-m') buiten de dubbele quotes. Bij mij krijg ik gewoon deze query: SELECT * FROM genealogie WHERE geboorte LIKE '15-07%'
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

15/07/2012 13:08:16
Quote Anchor link
George van Baasbank op 15/07/2012 12:38:16:
Omdat mijn tabel gevoed wordt vanuit een download die geheel opgebouwd is als tekstvelden

Je had ze ook bij in het invoeren in het juiste formaat kunnen zetten, had je deze query kunnen maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT * FROM genealogie
WHERE
    DAY(birthdate) = DAY(CURDATE())
AND
    MONTH(birthdate) = MONTH(CURDATE())

Alsnog wijzigen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
ALTER TABLE genealogie ADD COLUMN birthdate DATE AFTER geboorte;
UPDATE genealogie SET birthdate = STR_TO_DATE(geboorte, '%d-%m-%Y');
ALTER TABLE genealogie DROP COLUMN geboorte;
ALTER TABLE genealogie CHANGE COLUMN birthdate geboorte DATE;

Ik zie dat je de mysql extensie gebruikt, dus je moet iedere statement in een aparte querie uitvoeren (met mysqli kan dit in 1 querie)

Toevoeging op 15/07/2012 13:16:04:

Nog een leukere ;-):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT *, YEAR(CURDATE()) - YEAR(geboorte) AS age
FROM genealogie
WHERE
    DAY(geboorte) = DAY(CURDATE())
AND
    MONTH(geboorte) = MONTH(CURDATE())
Gewijzigd op 15/07/2012 13:16:39 door Ger van Steenderen
 
George van Baasbank

George van Baasbank

15/07/2012 13:23:26
Quote Anchor link
Hallo allemaal,

Met behulp van jullie suggesties heb ik de volgende (werkende) query samengesteld. Bedankt voor de hulp.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
// Query voor jarigen
$cVandaag = date("d-m")."%";
$sql = "SELECT * FROM genealogie WHERE geboorte LIKE '$cVandaag'";
$cResultJarige = mysql_query($sql);


George
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

15/07/2012 14:02:01
Quote Anchor link
George, wat ga je doen als je de jarigen in de komende week wilt hebben? Of de mensen die in een bepaald tijdvak zijn geboren?
Wellicht vind je me een zeur, maar in mijn ogen hoort een datum als date(time) in de db worden opgeslagen en niet als tekst, daar kan je -zonder extra handelingen- niks mee.
 
George van Baasbank

George van Baasbank

15/07/2012 14:23:18
Quote Anchor link
Ger,

Ik gebruik "de jarige van vandaag" alleen als topic in mijn nieuwe site (http://nieuw.vanbaasbank.nl). Op dit moment heb ik nog geen behoefte om de jarigen van de komende periode te scannen.
Je hebt gelijk als het gaat om de structuur van de database. Een veld met een datum hoort natuurlijk een type <date> te zijn maar ik ben gebonden aan een download van mijn genealogieprogramma die haar output als xls-bestand geeft(Excel) en die door mij t.b.v. de SQL-database wordt omgezet in een csv-bestand. Helaas is het gevolg dan een structuur van uitsluitend tekststructuren. Omdat ik eigenlijk zo min mogelijk wil sleutelen aan mijn php-documenten neem ik deze opbouw maar voor lief.

George
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.