sorteren van een niet datum veld... nieuw issue
ik heb een order issue met een datum. Echter het datumveld in de database is geen datetime veld maar een varchar. Of dat slim is kunnen we over hebben.. maar het is nu eenmaal een gegeven. Zou mijn keus niet zijn geweest.
maar daardoor nu een sorteerprobleem en het lukt met niet op het op te lossen.. het is opgeslagen als d-m-jjjj. Dagen en maanden hebben geen voorloopnullen. Ik heb STR_TO_DATE() maar dit lijkt geen invloed te hebben echter ook geen foutmelding
Ook heb ik CONVERT(datetime, ENDDATE, 105) geprobeerd maar dan krijg ik de foutmelding: mysqli_num_rows() expects parameter 1
my SELECT luidt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
$sqlUitlezen = mysqli_query($connection, $sql = "
SELECT
person.MSKEYVALUE_MEDEWERKER AS ASN,
person.EMPLOYEENUMBER AS PersNr,
person.DISPLAYNAME AS Naam,
person.ENDDATE AS UitdienstDatum,
person.HIREDATE AS InDiensDatum,
REF_OU AS IDMContainer
FROM
person
WHERE REF_OU = 'OU:99999999' CONVERT(datetime, ENDDATE, 105);
");
SELECT
person.MSKEYVALUE_MEDEWERKER AS ASN,
person.EMPLOYEENUMBER AS PersNr,
person.DISPLAYNAME AS Naam,
person.ENDDATE AS UitdienstDatum,
person.HIREDATE AS InDiensDatum,
REF_OU AS IDMContainer
FROM
person
WHERE REF_OU = 'OU:99999999' CONVERT(datetime, ENDDATE, 105);
");
iemand enig idee hoe ik dit moet oplossen
Gewijzigd op 22/02/2019 22:03:33 door - DHU -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# selecteren van datum
SELECT
ENDDATE,
SUBSTRING_INDEX( ENDDATE, '-', -1 ) AS jaar,
LPAD(SUBSTRING_INDEX( SUBSTRING_INDEX( ENDDATE, '-', -2) , '-' , 1), 2, '0') AS maand,
LPAD(SUBSTRING_INDEX( ENDDATE, '-', 1 ), 2, '0') AS dag,
CONCAT(
SUBSTRING_INDEX( ENDDATE, '-', -1 ),
'-',
LPAD(SUBSTRING_INDEX( SUBSTRING_INDEX( ENDDATE, '-', -2) , '-' , 1), 2, '0'),
'-',
LPAD(SUBSTRING_INDEX( ENDDATE, '-', 1 ), 2, '0')) AS nieuwjaar
FROM
person;
SELECT
ENDDATE,
SUBSTRING_INDEX( ENDDATE, '-', -1 ) AS jaar,
LPAD(SUBSTRING_INDEX( SUBSTRING_INDEX( ENDDATE, '-', -2) , '-' , 1), 2, '0') AS maand,
LPAD(SUBSTRING_INDEX( ENDDATE, '-', 1 ), 2, '0') AS dag,
CONCAT(
SUBSTRING_INDEX( ENDDATE, '-', -1 ),
'-',
LPAD(SUBSTRING_INDEX( SUBSTRING_INDEX( ENDDATE, '-', -2) , '-' , 1), 2, '0'),
'-',
LPAD(SUBSTRING_INDEX( ENDDATE, '-', 1 ), 2, '0')) AS nieuwjaar
FROM
person;
Als je het kunt repareren zou je het moeten repareren, nu ben je alleen maar werk voor je uit aan het schuiven.
Thomas van den Heuvel op 23/02/2019 01:05:33:
> Of dat slim is kunnen we over hebben.. maar het is nu eenmaal een gegeven. Zou mijn keus niet zijn geweest.
Als je het kunt repareren zou je het moeten repareren, nu ben je alleen maar werk voor je uit aan het schuiven.
Als je het kunt repareren zou je het moeten repareren, nu ben je alleen maar werk voor je uit aan het schuiven.
@Thomas, I know.... maar helaas ik heb er mee te dealen. Als ik het in eigenhand zou hebben dan zou ik je advies meteen ter harte nemen....
Jan
SELECT
SUBSTRING_INDEX(textdate, '/', 1),
SUBSTRING_INDEX(SUBSTRING_INDEX(textdate, '/', 2),'/',-1) ,
SUBSTRING_INDEX(textdate, '/', -1) ,
STR_TO_DATE(
CONCAT(
SUBSTRING_INDEX(textdate, '/', -1),'-',
LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(textdate, '/', 2),'/',-1) ,2,'00'),'-',
LPAD(SUBSTRING_INDEX(textdate, '/', 1),2,'00')),
'%Y-%m-%d') converteddate,
textdate,
gooddate ,
STR_TO_DATE(textdate, "%e/%c/%Y") converted_date
FROM
`test`
> mysqli_num_rows() expects parameter 1 ???
is trouwens maar een halve foutmelding.
Wanneer een query syntactisch niet goed is levert een aanroep voor het uitvoeren doorgaans false op. Nog voordat je dingen met het resultaat doet of probeert te doen (num_rows, fetch_whatever) is het zaak dat je eerst controleert of de query is geslaagd. Als hier geen sprake van is kun je alle vervolgacties rustig staken.
Ik zou je (toch) nogmaals het advies willen geven om de databasestructuur op orde te maken, want nu ben je enkel bezig met symptoombestrijding. Dit is eigenlijk de enige juiste oplossing.
Indien deze database niet in jouw beheer is zou je de eigenaar kunnen vragen om de datumkolommen te converteren. Of, wanneer dit om backwards compatible redenen niet mogelijk is (meerdere partijen hebben oplossingen lopen breien om dit slecht ontwerp tegemoet te komen) zou je een nieuwe kolom kunnen (laten) aanmaken die wel een zinnig datumformaat heeft waarmee je kunt rekenen.
Nogmaals, elke andere oplossing is tot op zekere hoogte onzinnig omdat je allerlei doekjes voor het bloeden introduceert.
Het idee van een database is ook dat je hier makkelijk informatie uit zou moeten kunnen halen. Wanneer dit niet lukt dan is er simpelweg iets mis met het ontwerp.
Je kunt hier of een heleboel (overbodig) programmeerwerk tegenaan gooien, of het gewoon op de juiste plek oplossen.
waarbij je het format %Y-%m-%d nog wel even in het door jou gebruikte model moet zetten en eventueel foute data in een case structuur wegselecteren om MySQL foutmeldingen te voorkomen.
Gewijzigd op 23/02/2019 16:12:07 door Aad B
@Thomas.. ik kan je niet anders dan gelijk geven. Maar meer dan dit gegeven zit er toch echt niet in. Ben het met je eens dat de opbouw op deze manier belabberd is en dat je dan achter de feiten aanloopt door allerlei houtje-touwtje oplossing en veel corretiewerk te doen.. Maar het is uitgesloten dat ze de database aanpassen, Heb ik er al meerdere malen om verzocht.. zonder resultaat
@alle andere.. bedankt weer voor het meedenken.