![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBExpert
Firebird - Convert Timestamp function
Guten Tag,
Kann mir jemand von euch sagen wie ihr in einem TIMESTAMP-Feld sucht ? Ich versuche es gerade per like:
Code:
Mein Problem ist nun aber das ich im amerikanischen Format, mit like, suchen muss '2020-02-13' sonst wird nichts gefunden. Somit wollte ich eine Funktion schreiben die mir dies umwandelt.
select h.GEBURTSDATUM from hund h
where h.GEBURTSDATUM like '%13%' Ist dies in Firebird 2.5 möglich ? Ich habe es bereits mit einer Prozedur getestet, diese funktioniert aber nur so:
Code:
Folgender Code funktioniert nicht (da eine Prozedur wohl keine Funktion ist):
select * FROM CONVERT_DATE(cast('2021-02-01 10:10:10' as TIMESTAMP))
Code:
Gruss Int3g3r
select h.GEBURTSDATUM from hund h
where CONVERT_DATE(h.GEBURTSDATUM) like '%13%' // ERROR: FUNCTION unkown. |
AW: Firebird - Convert Timestamp function
Like ist doch für Strings.
Nimm die Datumsfunktionen. ![]() |
AW: Firebird - Convert Timestamp function
Zitat:
Darin will ich nach Datum und Text suchen. Wie das untere Beispiel aufzeigt. Ich verwende dort die extract Befehle bereits. Kann doch nicht sein das ich jedes mal das Datum in meinem Landes-Format zusammensetzen muss. Darum möchte ich für das eine Funktion schreiben.
Code:
SELECT h.*, a.VORNAME ||' '|| a.NACHNAME ||' '|| a.PLZ ||' '|| a.ORT as Besitzer from hund h
left join adresse a on a.ID = h.BESITZER_ID where LOWER(h.HUNDNAME) LIKE :suche or extract(day from h.GEBURTSDATUM)||'.'||extract(month from h.GEBURTSDATUM)||'.'||extract(year from h.GEBURTSDATUM) LIKE :suche or LOWER(h.CHIP_NR) LIKE :suche or LOWER(h.ANMELDUNGSGRUND) LIKE :suche or LOWER(a.VORNAME) LIKE :suche or LOWER(a.Nachname) LIKE :suche or LOWER(a.PLZ) LIKE :suche or LOWER(a.Ort) LIKE :suche Folgende Prozedur funktioniert, ist aber keine Funktion daher kann ich diese nicht im Join oben verwenden!:
Code:
create or alter procedure CONVERT_DATE (
DATA timestamp not null) returns ( RESULT varchar(30)) as begin if(DATA IS NULL) then begin result = NULL; end else begin result = (LPAD(extract(DAY FROM DATA),2,'0') ||'.'|| LPAD(extract(MONTH FROM DATA),2,'0') ||'.'|| LPAD(extract(YEAR FROM DATA),4,'0') ||' '|| LPAD(extract(HOUR FROM DATA),2,'0') ||':'|| LPAD(extract(MINUTE FROM DATA),2,'0') ||':'|| LPAD(extract(SECOND FROM DATA),7,'0')); end suspend; end^ SET TERM ; ^ |
AW: Firebird - Convert Timestamp function
Ich würde das Konzept noch einmal überdenken. Wieso sollte man nach Strings in einem Datum suchen? Was soll denn bei einer 2 herauskommen? Jeder 2., 12. und 22. jedes Monats + der komplette Februar und Dezember jedes Jahres + jedes Datum ab 1.1.2000 + 1992 + 1982 + ...?
|
AW: Firebird - Convert Timestamp function
Zitat:
Ich habe mir halt überlegt das ich gerne z.b nach "12.02" suchen möchte und dann alle Resultate angezeigt werden. Dazu in einem einzigen Suchfeld wo ich auch direkt nach Text suche. Bei sehr vielen Datensätzen ist dies sicherlich nicht ein gutes Konzept da gebe ich dir recht. Werde mir dazu nochmals ein paar Gedanken machen |
AW: Firebird - Convert Timestamp function
Zitat:
Code:
oder halt nur ins where:
SELECT h.*, a.VORNAME ||' '|| a.NACHNAME ||' '|| a.PLZ ||' '|| a.ORT as Besitzer from hund h
left join adresse a on a.ID = h.BESITZER_ID left join CONVERT_DATE(h.GEBURTSDATUM) d on 1 = 1 where LOWER(h.HUNDNAME) LIKE :suche or LOWER(h.CHIP_NR) LIKE :suche or LOWER(h.ANMELDUNGSGRUND) LIKE :suche or LOWER(a.VORNAME) LIKE :suche or LOWER(a.Nachname) LIKE :suche or LOWER(a.PLZ) LIKE :suche or LOWER(a.Ort) LIKE :suche or d.result like :suche
Code:
Frank
(select result from CONVERT_DATE(h.GEBURTSDATUM)) like :suche
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz