sorteren van een niet datum veld... nieuw issue

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- DHU -

- DHU -

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 - DHU -
 
PHP hulp

PHP hulp

18/04/2024 23:23:06
 
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.
 
- DHU -

- DHU -

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
 
- DHU -

- DHU -

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.