Eigener Datentyp

Allgemeines zu PostgreSQL.
karl_ha
Erfahrener Benutzer
Beiträge: 234
Registriert: So 8. Mär 2009, 21:15
Kontaktdaten:

Eigener Datentyp

Beitragvon karl_ha » Do 16. Apr 2009, 10:56

Hallo,

ich habe Zahlen in diesem Format 000.000.000

Kann ich einen Datentyp erstellen, damit bei der Eingabe auf dieses Format geachtet wird?

Es gibt dazu den Befehl create TYPE() Was jedoch in die Klammer kommt ist nicht ganz klar.

Karl

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitragvon ads » Do 16. Apr 2009, 11:14

Hier ist mal ein ausführliches Beispiel, wie man einen neuen Datentyp erstellt:

BOOLEAN datatype with PHP-compatible output - ads' corner
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support

akretschmer
Erfahrener Benutzer
Beiträge: 7036
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitragvon akretschmer » Do 16. Apr 2009, 11:18

karl_ha hat geschrieben:Hallo,

ich habe Zahlen in diesem Format 000.000.000

Kann ich einen Datentyp erstellen, damit bei der Eingabe auf dieses Format geachtet wird?

Es gibt dazu den Befehl create TYPE() Was jedoch in die Klammer kommt ist nicht ganz klar.

Karl



Code: Alles auswählen

test=*# set lc_numeric='de_DE.UTF-8';
SET
test=*# commit;
COMMIT
test=# select to_char(123456789, '999G999G999');
   to_char
--------------
  123.456.789
(1 row)

test=*# select to_number('123.456.789', '999G999G999');
 to_number
-----------
 123456789
(1 row)


reicht das auch?

Andreas
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

karl_ha
Erfahrener Benutzer
Beiträge: 234
Registriert: So 8. Mär 2009, 21:15
Kontaktdaten:

Beitragvon karl_ha » Do 16. Apr 2009, 11:30

@akretschmer Diese Möglichkeit scheint mir doch um einiges einfacher zu sein.
test=*# set lc_numeric='de_DE.UTF-8';
Es kommt aber eine Fehlermeldung. (Habs direkt in die Konsole eingetragen)

Code: Alles auswählen

select to_char(123456789, '999G999G999');

Das geht aber.

Code: Alles auswählen

invalid value for parameter "lc_numeric": "de_DE.UTF-8"
@ads: Vielleicht geh ich das noch später an, ist halt echt ein Aufwand. Erst die Funktionen, Operatoren, Klassen. Da wäre ich eine ganze Weile beschäftigt.

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitragvon ads » Do 16. Apr 2009, 11:49

Du brauchst nicht alles davon, jedenfalls nicht, wenn du den Datentyp nur zum Speichern von Daten nutzen willst.

Die Operatoren ect. sind notwendig, wenn du mit anderen Datentypen interagieren möchtest, also z. B. Vergleiche durchführen oder Casten auf andere Typen.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild



Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler



PostgreSQL Service & Support

akretschmer
Erfahrener Benutzer
Beiträge: 7036
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitragvon akretschmer » Do 16. Apr 2009, 11:49

karl_ha hat geschrieben:@akretschmer Diese Möglichkeit scheint mir doch um einiges einfacher zu sein.
Es kommt aber eine Fehlermeldung. (Habs direkt in die Konsole eingetragen)

Code: Alles auswählen

select to_char(123456789, '999G999G999');

Das geht aber.

Code: Alles auswählen

invalid value for parameter "lc_numeric": "de_DE.UTF-8"




Vermutlich kennt Dein OS das nicht, Du wirst sie dort erst anlegen müssen.

Andreas
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

karl_ha
Erfahrener Benutzer
Beiträge: 234
Registriert: So 8. Mär 2009, 21:15
Kontaktdaten:

Beitragvon karl_ha » Fr 17. Apr 2009, 14:51

Das mit den Datentyp selbst erstellen bekomme ich wohl nicht hin, bzw. ein einfaches Beispiel wäre vielleicht anschaulicher.

Wie lange braucht dazu ein freiberuflicher DB-Programmierer?

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitragvon ads » Fr 17. Apr 2009, 14:56

Das hängt davon ab, was du alles benötigst ...

Deine Vorgaben reichen nicht unbedingt als Lastenheft aus ;-)
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild



Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler



PostgreSQL Service & Support

akretschmer
Erfahrener Benutzer
Beiträge: 7036
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitragvon akretschmer » Fr 17. Apr 2009, 14:58

karl_ha hat geschrieben:Das mit den Datentyp selbst erstellen bekomme ich wohl nicht hin, bzw. ein einfaches Beispiel wäre vielleicht anschaulicher.

Wie lange braucht dazu ein freiberuflicher DB-Programmierer?


Was genau willst Du denn machen damit? So, wie ich Dich verstanden habe, geht es nur darum, 'normale' Zahlen in einer bestimmten Formatierung EIN/Auszugeben. Dazu nannte ich eine Lösung.

Hast Du allerdings irgend was besonderes an solchen Zahlen, ich spinne mal: 100.001.010 * 2 soll 100.001.020 sein, dann brauchst halt echt einen neuen Datentypen und dazu die passenden Rechenoperatoren und so weiter.

Also, sag an...

Andreas
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

karl_ha
Erfahrener Benutzer
Beiträge: 234
Registriert: So 8. Mär 2009, 21:15
Kontaktdaten:

Beitragvon karl_ha » Fr 17. Apr 2009, 15:14

ads hat geschrieben:Das hängt davon ab, was du alles benötigst ...

Deine Vorgaben reichen nicht unbedingt als Lastenheft aus ;-)


Logo, habe noch nicht ein Lastenheft erstellen müssen. Was kommt da alles rein?

Der Datentyp soll im Format 000.000.000 sein.
Also drei Pakete mit je 3 Zahlen welche 0-9 umfassen können
Das Trennzeichen ist ein Punkt

Der Datentyp muss als PrimaryKey verwendet werden können

Es muss keine Addition etc stattfinden können.

Da ich immer gerne auch etwas lernen möchte würde ich auch gerne den Weg dazu sehen. Auf der postgres.org Seite steht ja schon etwas dazu. Bei mir hat es aber noch nicht klick gemacht.

Karl


Zurück zu „Allgemeines“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste