Seite 1 von 1

PostgreSQL "CAST" und "Function"

Verfasst: Mi, 01. Aug 2012 4:55
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 ?

Re: PostgreSQL "CAST" und "Function"

Verfasst: Mi, 01. Aug 2012 8:15
von brandelh
das Schlüsselwort 'cast' kenne ich von VO her und bezeichnete dort die explizite Typumwandlung.

Re: PostgreSQL "CAST" und "Function"

Verfasst: Mi, 01. Aug 2012 9:22
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

Re: PostgreSQL "CAST" und "Function"

Verfasst: Mi, 01. Aug 2012 14:50
von bgl
Ich glaube du dürftest die Antwort in deinem INDEXKEY-Thread finden ;-)

Re: PostgreSQL "CAST" und "Function"

Verfasst: Do, 02. Aug 2012 0:39
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.