sorteren van een niet datum veld... nieuw issue

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Web Ontwikkelaar PHP, Nijmegen

Contactpersoon Roel Kavelaar rkavelaarATsearch-consult.nl 0243528815 0644949337 Organisatie Jong, gezond en sterk groeiende bedrijf dat webbased multimedia oplossingen bouwt in de omgeving Nijmegen. Het bedrijf bouwt voor klanten o.a. geavanceerde websites, webwinkels, webapplicaties en specifieke webbased software. Het bedrijf ontwikkelt en onderhoudt ook verschillende bekende Nederlandse websites. Op dit moment hebben zij een groeiende en brede klantenkring opgebouwd. Met betrekking tot programmeer-, onderhoud-, ontwerp-werkzaamheden wordt een PHP ontwikkelaar gezocht met kennis van contentmanagementsysteemen en frameworks. Locatie Nijmegen Verantwoordelijkheden (Her)Ontwerpen en (her)ontwikkelen in PHP ten behoeve van websites voor klanten, project klussen, onderhoud en specifieke klantwensen (Her)Ontwerpen en (her)ontwikkelen in PHP, PHP

Bekijk vacature »

Dirk Huizinga

Dirk Huizinga

22/02/2019 22:03:04
Quote Anchor link
Hallo guys,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
            ");    


iemand enig idee hoe ik dit moet oplossen
Gewijzigd op 22/02/2019 22:03:33 door Dirk Huizinga
 
PHP hulp

PHP hulp

19/05/2019 09:28:22
Honeypot
 
Adoptive Solution

Adoptive Solution

22/02/2019 22:45:50
Quote Anchor link
Niet direct het antwoord, maar wellicht voor de toekomst om de datum om te zetten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
# update van datum
UPDATE
    person
SET
    ENDDATE = CONCAT(
        SUBSTRING_INDEX( ENDDATE, '-', -1 ),
        '-',
        LPAD(SUBSTRING_INDEX( SUBSTRING_INDEX( ENDDATE, '-', -2), '-' , 1), 2, '0'),
        '-',
        LPAD(SUBSTRING_INDEX( ENDDATE, '-', 1 ), 2, '0')
        );
 
Thomas van den Heuvel

Thomas van den Heuvel

23/02/2019 01:05:33
Quote Anchor link
> 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.
 
Dirk Huizinga

Dirk Huizinga

23/02/2019 09:20:34
Quote Anchor link
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.


@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 R

Jan R

23/02/2019 11:06:31
Quote Anchor link
Onderstaande conversies lukken bij mij wel

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`
 
Thomas van den Heuvel

Thomas van den Heuvel

23/02/2019 13:04:57
Quote Anchor link
Dit:
> 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.
 
Aad B

Aad B

23/02/2019 16:07:20
Quote Anchor link
Misschien in de ORDER BY sorteren met de MySQL str_to_date function??
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
.
.
.
.
ORDER BY str_to_date(ENDDATE,'%Y-%m-%d');

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
 
Dirk Huizinga

Dirk Huizinga

23/02/2019 23:10:34
Quote Anchor link
@Aad... thnkx.. dit is voor nu iets dat werkt. thnx

@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.
 



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.