PostgreSQL "CAST" und "Function"

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

PostgreSQL "CAST" und "Function"

Beitrag von AUGE_OHR »

hi,

ich bin nun auf CAST gestossen. was macht das und wofür kann man das "nutzen" ?

ich bin nun durch "Typumwandlung" auf das Thema gekommen

Code: Alles auswählen

CAST ( ausdruck AS typ )
expression::type
wobei sich "AS typ" und "::type" unterscheiden können.

nun finde ich "CAST" im Zusammenhang mit "SELECT " wo es scheinbar wie eine "Function" eingesetzt werden kann.
mit einem "CREATE CAST" kann ich es wohl ähnlich einer ""Function" für eine Table abspeichern.

Frage : was ist für mein Vorhaben mit "Typumwandlung" besser geeignet ?
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PostgreSQL "CAST" und "Function"

Beitrag von brandelh »

das Schlüsselwort 'cast' kenne ich von VO her und bezeichnete dort die explizite Typumwandlung.
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: PostgreSQL "CAST" und "Function"

Beitrag von georg »

Hallo,


vielleicht darf ich das Augenmerk der geschätzten Foren-Kollegen auf folgenden Beitrag richten:

http://www.1keydata.com/sql/sql-cast.html

Insgesamt ist SQL recht typ-verträglich, d.h. ein

Code: Alles auswählen

SELECT * FROM table WHERE field = 1
und

Code: Alles auswählen

SELECT * FROM table WHERE field = '1'
schlucken die meisten Systeme ohne Probleme. Wo das nicht geht, kann über CAST eine explizite Umwandlung des Formates erzwungen werden (auf der obigen Seite z.B. ein FLOAT in ein INT).

Sinn macht es, wenn man es braucht. Selbst habe ich bisher wenig Fälle gefunden, bei denen ich so etwas benötigt hätte.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
bgl
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Di, 30. Aug 2011 20:45

Re: PostgreSQL "CAST" und "Function"

Beitrag von bgl »

Ich glaube du dürftest die Antwort in deinem INDEXKEY-Thread finden ;-)
bgl
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Di, 30. Aug 2011 20:45

Re: PostgreSQL "CAST" und "Function"

Beitrag von bgl »

Noch ein paar Anmerkungen zu CASTs:

Zumindest in PostgreSQL definiert sich eine STORED FUNCTION nicht nur über ihren Namen und ihr Schema, sondern auch über die Art ihrer Parameter, da Funktionsüberladung möglich ist. Das heisst also, dass sich eine als xyz(param1 INTEGER) angelegte STORED FUNCTION von xyz('1') nicht angesprochen fühlt, wohl aber von xyz('1'::INTEGER).

In den meisten anderen Fällen rät die Datenbank, was hier wohl am sinnvollsten wäre, kann sie es nicht erraten, so gibt es eine Fehlermeldung - explizite CASTs beugen diesen Risiko ebenso wie dem einer Fehleinschätzung vor.

CASTs haben ihre Grenzen - dafür gibt es dann Funktionen wie TO_TEXT oder TO_DATE, wo man nicht nur den Ausgangs- und Zielwert definieren kann, sondern auch sagen kann, wie der Ausgangswert zu interpretieren ist (gerade bei TEXT <> DATE Umwandlungen ist das also idR ratsamer, als ein einfacher CAST).


Zu den beiden Funktionen:
SELECT CAST('1' AS INTEGER);
entspricht
SELECT '1'::INTEGER;

So einfach ist das.
Antworten