Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Frac() für (MS) Access SQL (https://www.delphipraxis.net/116119-frac-fuer-ms-access-sql.html)

berens 23. Jun 2008 23:11

Datenbank: Access über MSSQL • Version: 2003 • Zugriff über: ADO/DBGo

Frac() für (MS) Access SQL
 
Hi!

Wie kann ich eine Abfrage nach den Nachkommastellen sortieren lassen (Ganzzahl interessiert nicht)?

Floor() liefert leider auch eine Fehlermeldung zurück, sonst könnte man versuchen:

SELECT *, Feld1 - Floor(Feld1) AS Nachkomma FROM MeineTabelle ORDER BY Nachkomma;
^-- Soll nur das Prinzip veranschaulichen, muss nicht Syntaktisch korrekt sein, also da bitte nicht drauf rumreiten.

Hintergrund:
Ich habe in meiner Tabelle mehrere Startzeiten (Datum, Uhrzeit als ein Double-Wert). Diese will ich nur nach Uhrzeit sortiert ausgeben lassen. Datum interessiert nicht. Wie mache ich das?

Danke im Vorraus.

mkinzler 24. Jun 2008 05:40

Re: Frac() für MSSQL
 
Warum keine Date-Feld?
Welchen Fehler liefert Floor()?

NormanNG 24. Jun 2008 07:01

Re: Frac() für MSSQL
 
Hi,


einfach von DatumZeit den Datum-Anteil abhziehen...

SQL-Code:
select
 Sort = datefield - CAST(ROUND(CAST(DateField AS real),0,1) AS datetime)
from ...
order by 1

berens 24. Jun 2008 09:14

Re: Frac() für MSSQL
 
Tabellenname: Termine
Feldname: Von

Bei mir kommt bei

SQL-Code:
select
Sort = Termine.Von - CAST(ROUND(CAST(Von AS real),0,1) AS datetime)
from Termine
order by 1
Syntaxfehler blabla und "AS" wir markiert. Kann Access mal wieder damit nicht umgehen? hm.

Ausserdem, was ist wenn Termine später als 12:00 Uhr sind? Weil dann wird die Zahl doch aufgerundet und ich bekomme ein negatives Ergebnis, oder?

Edit:
Zitat:

Warum keine Date-Feld
Es ist ein DateTime-Feld, aber da wüsste ich noch weniger, wie ich die Abfrage machen soll, dass er nach Uhrzeit sortiert.

Zitat:

Welchen Fehler liefert Floor()?
Unbekannte Funktion "Floor".

alzaimar 24. Jun 2008 09:35

Re: Frac() für MSSQL
 
SQL-Code:
select * from Tabelle
order by convert(varchar,DatumsFeld,108)
oder
SQL-Code:
select convert(varchar,DatumsFeld,108), * from Tabelle
order by 1
Die CONVERT-Funktion mit diesen Parametern liefert die formatierte Uhrzeit des Datumsfeldes.

NormanNG 24. Jun 2008 09:44

Re: Frac() für MSSQL
 
Hi,

Zitat:

SQL-Code:
select
Sort = Termine.Von - CAST(ROUND(CAST(Von AS real),0,1) AS datetime)
from Termine
order by 1
Syntaxfehler blabla und "AS" wir markiert. Kann Access mal wieder damit nicht umgehen? hm.
Sorry, ich habe mich von Titel irreleiten lassen - das klappt nur unter MSSQL...

berens 24. Jun 2008 09:44

Re: Frac() für MSSQL
 
"Undefinierte Funktion 'convert' im Ausdruck."

Ich glaube, Access ist das echt zu dämlich für. Muss ich hier vll. deutsche Befehle benutzen (wie in Excel) so nach dem Motto:
SELECT * FROM Termine
ORDER BY UMWANDELN(varchar, Von, 108);

Laut Hilfe gibt es die Funktion aber! Und mit Ceiling kann man glaube ich sogar direkt die Nachkommazahl ausgeben lassen. Aber es klappt nicht. Ich teste das Ganze hier gerade direkt in Access 2007, also kann das kein Delphiproblem sein. Trotzdem noch irgendwer einen Tip?

Auszug aus der Hilfe:
Zitat:

Access 2007-Entwicklerreferenz > Microsoft Access-SQL-Referenz > Übersicht über die Access-SQL-Referenz
Access-Entwicklerreferenz
ODBC-Skalarfunktionen

Microsoft® Access SQL unterstützt die Verwendung der über ODBC definierten Syntax für Skalarfunktionen. Beispielsweise gibt die Abfrage

SELECT DAILYCLOSE, DAILYCHANGE FROM DAILYQUOTE WHERE {fn ABS(DAILYCHANGE)} > 5

alle Zeilen zurück, in denen der absolute Wert für die Preisänderung einer Aktie größer als fünf ist.

Es wird eine Untermenge der über ODBC definierten Skalarfunktionen unterstützt. In der folgenden Tabelle sind die unterstützten Funktionen aufgeführt.

Eine Beschreibung der Argumente und eine ausführliche Erläuterung der Escapesyntax für INCLUDE-Funktionen in einer SQL-Anweisung finden Sie in der ODBC-Dokumentation.

Zeichenfolgenfunktionen
ASCII LENGTH RTRIM
CHAR LOCATE SPACE
CONCAT LTRIM SUBSTRING
LCASE RIGHT UCASE
LEFT

Numerische Funktionen
ABS FLOOR SIN
ATAN LOG SQRT
CEILING POWER TAN
COS RAND MOD
EXP SIGN

Uhrzeit- und Datumsfunktionen
CURDATE DAYOFYEAR MONTH
CURTIME YEAR WEEK
NOW HOUR QUARTER
DAYOFMONTH MINUTE MONTHNAME
DAYOFWEEK SECOND DAYNAME

Datentypkonvertierung
CONVERT Zeichenfolgenliterale können in folgende Datentypen konvertiert werden: SQL_FLOAT, SQL_DOUBLE, SQL_NUMERIC, SQL_INTEGER, SQL_REAL, SQL_SMALLINT, SQL_VARCHAR und SQL_DATETIME.

Siehe auch

alzaimar 24. Jun 2008 09:49

Re: Frac() für (MS) Access SQL
 
NormanNG, ich auch :oops:

marabu 24. Jun 2008 10:24

Re: Frac() für (MS) Access SQL
 
Hallo,

wenn das DateTime-Feld in der Tabelle TBL.DT heißt, dann würde ich es so probieren:

SQL-Code:
SELECT * FROM TBL WHERE ... ORDER BY TimeValue(DT)
Grüße vom marabu

berens 24. Jun 2008 10:28

Re: Frac() für (MS) Access SQL
 
Funktioniert perfekt, vielen Dank!

Wo kann man so Infos nachschlagen? Die MS-Access-Hilfe taugt ja nichts, da -wie wir oben gesehen habe- zwar tolle Infos zum MS-SQL-Server stehen, diese Befehle aber mit einer einfachen Access-DB nicht funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr.
Seite 1 von 2  1 2      

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