Adatbázisok – Gyakorlati PostgreSQL – Type Coercion

Type Coercion

A PostgreSQL három különböző konvenciót támogat a type coercionra (más néven type casting, vagyexplicit type casting). A type coercion egy kissé csúnyának tűnő kifejezés, amely egyPostgreSQL módszerre utal, amellyel egy értéket egyik adattípusból egy másikba lehet átváltani. Egy SQL utasítás közepén ennek az a hatása, hogy explicit módon létrehoz egy tetszőleges típusú konstanst.

Általában a következő három módszer bármelyike használható egy stringkonstansban lévő érték más típusba való átvitelére:

  • típus ‘érték ‘

  • ‘érték ‘::típus

  • CAST (‘érték ‘ AS típus )

A karbantartott numerikus konstansok esetében, amelyeket karakterláncba szeretnénk átkonvertálni, az alábbi szintaxisformák egyikét kell használnunk:

  • érték ::típus

  • CAST (érték AS típus )

Az érték ebben a szintaxisban azt a konstansot jelöli, amelynek adattípusát módosítani kívánja,a típus pedig azt a típust, amelyre az értéket kényszeríteni, vagy átkonvertálni kívánja.

Figyelem: Ne feledje, hogy a money típus deprecated, és ezért nem könnyen castolható.

A konstansok nem az egyetlen adatértékek, amelyek különböző típusokra kényszeríthetők. Egy SQL-lekérdezés által visszaadott adathalmaz oszlopaiaz azonosítójának felhasználásával az alábbi szintaxisformák valamelyikével kasztolhatók:

  • azonosító ::típus

  • CAST (azonosító AS típus )

Ne feledjük, hogy nem minden adattípus kényszeríthető minden más adattípusba. Például nincs értelmes módja annak, hogy az abcd karakterláncot bináris bittípussá alakítsuk. Az érvénytelen öntés hibát eredményez aPostgreSQL részéről. A leggyakoribb érvényes castingok a karakterláncból, dátum/idő típusból vagy numerikus típusból szöveggé, vagy karakterláncból numerikus értékké.

A típuscastolási konvenciók mellett vannak olyan függvények, amelyek meghívásával lényegében ugyanazt a hatást lehet elérni, mint a korábban említett formák bármelyikének explicit castolásával. Ezek gyakran magának a típustípusnak a nevét viselik (mint például a text() függvény), bár mások pontosabban vannak megnevezve (mint például a bitfromint4()). A 3-30. példa egy ilyen függvényt mutat, amely az 1000 egész számot az 1000 karaktereket reprezentáló typetext karakterlánccá alakítja.

3-30. példa. Típuskonverziós függvények használata

booktown=# SELECT text(1000) booktown-# AS explicit_text; explicit_text--------------- 1000(1 row)

A PostgreSQL elemzője által felismert ellentmondásos szemantika miatt a type coercion format of type ‘value ‘ csak egyetlen érték adattípusának megadására használható (pl. egy szimpla idézőjelek közé kötött string konstans). Ezzel szemben a type coercion többi rendelkezésre álló módszere(‘value ‘::type,CAST(‘value’ AS type )és a type conversion függvények, ahol alkalmazható) tetszőleges kifejezések típusának megadására használható.

Ez részben azért van, mert ha egy adattípust csoportosított kifejezéssel próbálunk követni (pl., zárójelben) a PostgreSQL a megadott adattípus nevével rendelkező függvényt vár (ami gyakran hibát okoz), míg a többi módszer mindegyike szintaktikailag érvényes a csoportosított kifejezésekre.

booktown=# SELECT 1 + integer ('1' || '2') AS add_one_to_twelve;ERROR: Function 'integer(text)' does not exist Unable to identify a function that satisfies the given argument types You may need to add explicit typecastsbooktown=# SELECT 1 + ('1' || '2')::integer AS add_one_to_twelve; add_one_to_twelve------------------- 13(1 row)booktown=# SELECT 1 + CAST('1' || '2' AS integer) AS add_on_to_twelve; add_on_to_twelve------------------ 13(1 row)

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.