Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Problem beim auflösen eines Datums im SQL (https://www.delphipraxis.net/103691-sql-problem-beim-aufloesen-eines-datums-im-sql.html)

Eppos 20. Nov 2007 09:36

Datenbank: Firebird • Version: 1.5 • Zugriff über: bde

SQL Problem beim auflösen eines Datums im SQL
 
Hallo zusammen,

ich habe folgendes Problem. Ich möchte ein Datum Formatieren.
Der SQl:

SQL-Code:
select ID, Datum_1,
case
  when Datum_1 < '01.01.1900' then '...'
  else Datum_1
end
from Daten1
order by Datum_1
Diese Ergebnis liefert folgendes:

ID, Datum_1 , Case
1 , 31.12.1899, ...
2 , 31.12.1899, ...
3 , 31.12.1899, ...
4 , 03.01.1999, 3-JAN-1999 <---- Formatierung sollte so sein wie in Datum_1

Hat da jemand nen Vorschlag?

Vielen Dank!

Gruß,
Eppos

mkinzler 20. Nov 2007 10:05

Re: SQL Problem beim auflösen eines Datums im SQL
 
Was für ein wert wird im 1.Fall geliefert (Typ)? Vielleicht hilft ein CAST

Hansa 20. Nov 2007 10:07

Re: SQL Problem beim auflösen eines Datums im SQL
 
Sofern das nicht wieder nur die BDE ist (wenn ichs nicht sage tuts gleich ein anderer :lol:) : Guck dir mit einem anständigen Admin-Tool zuerst mal die Tabellendefinition an. Also die beiden Felder da. Probiere das auch mal mit Oktober oder December. Würde mich nicht wundern, wenn dann OCT oder DEC zu sehen wäre. Irgendwo ist eine Formateinstellung falsch. Tsts Firebird mit BDE. :mrgreen:

dataspider 20. Nov 2007 10:09

Re: SQL Problem beim auflösen eines Datums im SQL
 
Hi,

ich kann nur folgende Lösung vorschlagen:

SQL-Code:
select ID, Datum_1,
  case
    when Datum_1 < '01.01.1900' then
      '...'
    else
      substring(Datum_1 from 9 for 2)||'.'||
      substring(Datum_1 from 6 for 2)||'.'||
      substring(Datum_1 from 1 for 4)
  end
  from Daten1
  order by Datum_1
Cu, Frank
[EDIT]OK, ist Quatsch - bei mir ist das Datum im Format JJJJ-MM-TT

Eppos 20. Nov 2007 10:15

Re: SQL Problem beim auflösen eines Datums im SQL
 
@dataspider
Danke für deinen Vorschlag, das funktioniert nicht.

Hansa 20. Nov 2007 10:19

Re: SQL Problem beim auflösen eines Datums im SQL
 
Zitat:

Zitat von Eppos
case
when Datum_1 < '01.01.1900' then '...'
else Datum_1
end[/sql]

Diese Ergebnis liefert folgendes:

4 , 03.01.1999, 3-JAN-1999 <---- Formatierung sollte so sein wie in Datum_1

Könnte nicht sogar folgendes sein : durch das if in dem Format geht Firebird davon aus, dass das
Ergebnis im selben Format vorliegen soll ? :gruebel:

Ist an der Theorie was dran, dann müsste das hier funktionieren :

[quote="Eppos"]case
when Datum_1 < '01.01.1900' then '...'
else when Datum_1 >= '01.01.1900' then '...'
end[/sql]

Syntax ist als Pseudocode zu verstehen.

dataspider 20. Nov 2007 10:35

Re: SQL Problem beim auflösen eines Datums im SQL
 
Firebird castet in deinem Beispiel das Datum in ein Char oder VarChar.
Würdest du statt '...' null nehmen, sollte das Format richtig sein.
Bei Dialect 1 ist das Format beim Casten von Date auf Char leider so wie oben (DD-MMM-CCYY).
Bei Dialect 3 ist das Format CCYY-MM-DD.

Ich würde jetzt wahrscheinlich eine SP schreiben, welche mit Extract die einzelnen Werte aus dem Datum extrahiert und dann wieder zusammensetzt.

Cu, Frank

omata 20. Nov 2007 18:45

Re: SQL Problem beim auflösen eines Datums im SQL
 
Vielleicht so...

SQL-Code:
SELECT id, datum_1,
       CASE WHEN datum_1 < '01.01.1900'
         THEN '...'
         ELSE EXTRACT(DAY FROM datum_1) || '.' || 
              EXTRACT(MONTH FROM datum_1) || '.' || 
              EXTRACT(YEAR FROM datum_1)
       END datum
FROM daten1
ORDER BY datum_1
Gruss
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz