Toon posts:

[PostgreSQL] ERROR: invalid input syntax for type date

Pagina: 1
Acties:

Vraag


  • Sr Juan
  • Registratie: Maart 2002
  • Laatst online: 29-03 23:42

Sr Juan

7 uur later dan bij jou in NL

Topicstarter
Mijn vraag
Een collega en mijzelf hebben een Query geschreven voor een automatisch raport/tabel dat wij versturen vanaf de server naar Email via ons framework.

Waar de Functie FRIDAY is om het aantal dagen met een marketing status het aantal dagen aangeeft.
Hoe lang heeft de persoon deze status?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
SELECT 
    b.marketingname AS "FE Name",
    c.employee_number AS "Paycor ID",
    techmap.exp AS "Technology",
    d.firstname || ' ' || d.lastname AS "FEM",
    e.firstname || ' ' || e.lastname AS "PS",
    f.firstname || ' ' || f.lastname AS "SME Trainer",
    (select count(*) from submissions subs2
        WHERE subs2.submissiondate between
            (date('{{FRIDAY}}') - interval '6 days') and '{{FRIDAY}}'
            AND subs2.marketingprofile_id = b.pk_marketingprofile
            AND subs2.status = 'ACTIVE'
        ) AS "Submissions"
FROM marketingprofiles b
INNER JOIN (SELECT h.marketingprofile_id, h.changed
    FROM history h
    JOIN (
        SELECT marketingprofile_id, max(change_date) AS maxCD,
            max(pk_history_id) AS maxHistoryID
        FROM history h2
        WHERE h2.change_date  < (date('{{FRIDAY}}') + interval '1 days')
                    AND h2.fieldname = 'marketingstatus'
        GROUP BY marketingprofile_id)
    h2 ON h2.marketingprofile_id = h.marketingprofile_id
    WHERE h.change_date = h2.maxCD AND h.pk_history_id = maxHistoryID
    GROUP BY h.marketingprofile_id, h.changed)
        h ON h.marketingprofile_id = b.pk_marketingprofile
JOIN employees c ON b.fe_id = c.pk_employee_id
    AND NOT
        (c.terminationdate is not null and lifecycle_status = 'TERMINATED' and
        c.terminationdate <= '{{FRIDAY}}')
JOIN employees d ON c.manager_id = d.pk_employee_id
JOIN employees e ON b.ps_id = e.pk_employee_id
LEFT OUTER JOIN employees f ON c.trainer_id = f.pk_employee_id
JOIN (values ('DS','Data Science'), ('BD','Big Data'),
    ('AN','Android'), ('IOS','iPhone iOS'), ('CS','Cyber Security'),
    ('AWS','Amazon Web Services'), ('AZ','Azure'),
    ('EX','O365/Exchange'), ('O365','O365/Exchange'),
    ('SP','Sharepoint')
    )
    AS techmap(abbr,exp) ON b.technology = techmap.abbr
WHERE
    h.changed = 'MARKETING'
        -- OR NOT (c.lifecycle_status='ON-PROJECT' -- ARGHH
            -- and b.marketingstatus='INACTIVE'))
    AND (select count(*) from submissions subs
        WHERE subs.submissiondate between
            (date('{{FRIDAY}}') - interval '6 days') and '{{FRIDAY}}'
            AND subs.marketingprofile_id = b.pk_marketingprofile
            -- AND subs.status = 'ACTIVE'
            ) < 6
    -- AND b.pk_marketingprofile=41724
    -- AND b.marketingstatus = 'MARKETING'
GROUP BY "FE Name","Paycor ID","Technology","FEM","PS","SME Trainer",
    b.pk_marketingprofile
HAVING count(*) < 6
ORDER BY "FE Name"



Relevante software en hardware die ik gebruik
PG admin 4

Wat ik al gevonden of geprobeerd heb:

Ik krijg:
ERROR: invalid input syntax for type date: '{{FRIDAY}}'
LINE 21: WHERE h2.change_date < (date('{{FRIDAY}}') + interval '1 ...

SQL state: 22007 ( An invalid datetime format was detected; that is, an invalid string representation or value was specified.)
Google leert mij (https://stackoverflow.com...3/invalid-datetime-format) en (https://www.postgresqltut.../postgresql-to_timestamp/) hoe ik dit zou kunnen oplossen, maar zou 1 van de twee redenenen waar kunnen zijn?

Mis ik gewoon ergens wat of een character ergens te veel.
OF
Kan het zijn dat ik een DATE en een String probeer te filteren?

[Voor 2% gewijzigd door Sr Juan op 01-02-2023 18:32. Reden: extra informatie]

El trago de mezcal, como lo senos de las mujeres, uno es insuficiente, tres son demasiados

Beste antwoord (via Sr Juan op 03-02-2023 00:04)


  • RobIII
  • Registratie: December 2001
  • Laatst online: 21:52

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Begin eens gewoon met je query (heul erg veul) te versimpelen. Breng die 57 regels eens terug naar een testcase van een paar regels ofzo. Een select * from <table> where <blah> en werk daar die {{FRIDAY}} in. En bouw van daar uit terug naar de query die je nu hebt. Dus zoiets om te beginnen:

SQL:
1
2
3
4
SELECT *
FROM history h2
WHERE h2.change_date  < date('{{FRIDAY}}')
LIMIT 10

En kijk of dat werkt.

We hebben verder geen kijk op je schema dus we kunnen niet ruiken of een veld een string is of een datetime en zonder de context te kennen zegt zo'n query met, voor ons, 95% irrelevante zaken ons natuurlijk ook weinig.
Sr Juan schreef op woensdag 1 februari 2023 @ 18:09:
Waar de Functie FRIDAY is om het aantal dagen met een marketing status het aantal dagen aangeeft.
Hoe lang heeft de persoon deze status?
Ook hier kan ik weinig hout van snijden...

Tot slot: Ik kan me vergissen maar "{{FRIDAY}}" is volgens mij geen PGSQL syntax; is dit iets waar in een applicatielaag een string-replace op wordt gedaan ofzo? Want in dat geval: Gebruik parametrized queries. Want Bobby Tables enzo.

[Voor 75% gewijzigd door RobIII op 01-02-2023 19:30]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij

Alle reacties


Acties:
  • Beste antwoord
  • 0Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 21:52

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Begin eens gewoon met je query (heul erg veul) te versimpelen. Breng die 57 regels eens terug naar een testcase van een paar regels ofzo. Een select * from <table> where <blah> en werk daar die {{FRIDAY}} in. En bouw van daar uit terug naar de query die je nu hebt. Dus zoiets om te beginnen:

SQL:
1
2
3
4
SELECT *
FROM history h2
WHERE h2.change_date  < date('{{FRIDAY}}')
LIMIT 10

En kijk of dat werkt.

We hebben verder geen kijk op je schema dus we kunnen niet ruiken of een veld een string is of een datetime en zonder de context te kennen zegt zo'n query met, voor ons, 95% irrelevante zaken ons natuurlijk ook weinig.
Sr Juan schreef op woensdag 1 februari 2023 @ 18:09:
Waar de Functie FRIDAY is om het aantal dagen met een marketing status het aantal dagen aangeeft.
Hoe lang heeft de persoon deze status?
Ook hier kan ik weinig hout van snijden...

Tot slot: Ik kan me vergissen maar "{{FRIDAY}}" is volgens mij geen PGSQL syntax; is dit iets waar in een applicatielaag een string-replace op wordt gedaan ofzo? Want in dat geval: Gebruik parametrized queries. Want Bobby Tables enzo.

[Voor 75% gewijzigd door RobIII op 01-02-2023 19:30]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Sr Juan
  • Registratie: Maart 2002
  • Laatst online: 29-03 23:42

Sr Juan

7 uur later dan bij jou in NL

Topicstarter
RobIII schreef op woensdag 1 februari 2023 @ 19:20:
Begin eens gewoon met je query (heul erg veul) te versimpelen. Breng die 57 regels eens terug naar een testcase van een paar regels ofzo. Een select * from <table> where <blah> en werk daar die {{FRIDAY}} in. En bouw van daar uit terug naar de query die je nu hebt. Dus zoiets om te beginnen:

SQL:
1
2
3
4
SELECT *
FROM history h2
WHERE h2.change_date  < date('{{FRIDAY}}')
LIMIT 10

En kijk of dat werkt.

We hebben verder geen kijk op je schema dus we kunnen niet ruiken of een veld een string is of een datetime en zonder de context te kennen zegt zo'n query met, voor ons, 95% irrelevante zaken ons natuurlijk ook weinig.


[...]

Ook hier kan ik weinig hout van snijden...

Tot slot: Ik kan me vergissen maar "{{FRIDAY}}" is volgens mij geen PGSQL syntax; is dit iets waar in een applicatielaag een string-replace op wordt gedaan ofzo? Want in dat geval: Gebruik parametrized queries. Want Bobby Tables enzo.
Je hebt helemaal gelijk, Ik liep te hard van stapel.

De FRIDAY functie is inderdaad van een Java injection, maar dat was mijn collega vergeten mij te vertellen.

Bijdeze opgelost en kan dicht.

Toch bedankt voor de tijd gespendeerd

El trago de mezcal, como lo senos de las mujeres, uno es insuficiente, tres son demasiados


  • RobIII
  • Registratie: December 2001
  • Laatst online: 21:52

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee