AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Frac() für (MS) Access SQL
Thema durchsuchen
Ansicht
Themen-Optionen

Frac() für (MS) Access SQL

Ein Thema von berens · begonnen am 24. Jun 2008 · letzter Beitrag vom 24. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

Frac() für (MS) Access SQL

  Alt 24. Jun 2008, 00:11
Datenbank: Access über MSSQL • Version: 2003 • Zugriff über: ADO/DBGo
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Frac() für MSSQL

  Alt 24. Jun 2008, 06:40
Warum keine Date-Feld?
Welchen Fehler liefert Floor()?
Markus Kinzler
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Frac() für MSSQL

  Alt 24. Jun 2008, 08:01
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
Gruß
Norman
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Frac() für MSSQL

  Alt 24. Jun 2008, 10:14
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".
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Frac() für MSSQL

  Alt 24. Jun 2008, 10:35
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Frac() für MSSQL

  Alt 24. Jun 2008, 10:44
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...
Gruß
Norman
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Frac() für MSSQL

  Alt 24. Jun 2008, 10:44
"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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

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

  Alt 24. Jun 2008, 10:49
NormanNG, ich auch
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

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

  Alt 24. Jun 2008, 11:24
Hallo,

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

SELECT * FROM TBL WHERE ... ORDER BY TimeValue(DT) Grüße vom marabu
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#10

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

  Alt 24. Jun 2008, 11:28
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 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