sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur pg_typeof() fungerar i PostgreSQL

I PostgreSQL, pg_typeof() funktionen låter dig få datatypen för vilket värde som helst.

Mer specifikt returnerar den OID för datatypen för värdet som skickas till den. Den returnerar en regtype , som är en OID-aliastyp. Därför är det samma som ett OID för jämförelseändamål men visas som ett typnamn.

Syntax

Funktionen har följande syntax:

pg_typeof(any)

Där any är vilket värde som helst.

Exempel

Här är ett grundläggande exempel att visa.

SELECT pg_typeof(100);

Resultat:

integer

Godyckliga strängar

I Postgres finns det mer än en typ av sträng (t.ex. char , varchar , text ). Därför kan du inte bara omge ett argument med enstaka citattecken och förvänta dig att det ska veta vad dess datatyp är.

SELECT pg_typeof('Elephant'); 

Resultat:

unknown

Därför måste du ange dess faktiska datatyp.

SELECT pg_typeof('Elephant'::varchar); 

Resultat:

character varying

I Postgres, character varying är namnet för varchar (faktiskt varchar är aliaset för character varying ).

Det sista exemplet var lite överflödigt, eftersom jag uttryckligen angav variabeltypen, vilket gjorde att jag redan visste vad resultatet skulle bli.

I den verkliga världen är det mer troligt att du kommer att försöka få datatypen för en variabel.

Returtyp för en variabel

I det här exemplet lägger jag den föregående strängen i en variabel och hämtar sedan dess datatyp.

DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
 raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$

Resultat:

NOTICE: Value: Elephant
Type: character varying

Här är den igen, förutom att jag ändrar datatypen till en annan strängtyp (char(8) ).

DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
 raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$

Resultat:

NOTICE: Value: Elephant
Type: character

Booleska värden

Här är ett exempel på att explicit tillhandahålla ett booleskt värde.

SELECT 
  pg_typeof(true),
  pg_typeof(false); 

Resultat:

 pg_typeof | pg_typeof
-----------+-----------
   boolean | boolean

Returtyp för en funktion

Återigen, det är osannolikt att du uttryckligen anger true eller false till denna funktion. Det är mer troligt att det kommer från en variabel.

Men du kan också använda pg_typeof() för att ta reda på returtypen för en funktion.

Här är ett exempel.

SELECT pg_typeof(isfinite(date '2020-07-18'));

Resultat:

boolean

I det här fallet passerade jag isfinite() funktion till pg_typeof() fungera som dess argument.

Och här är ett annat exempel. I den här får jag datatypen för returvärdet för make_date() funktion.

SELECT pg_typeof(make_date('1999', '09', '19')); 

Resultat:

date

Datatyp för en kolumn

Här är ett exempel på att returnera datatypen för en databaskolumn.

SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;

Resultat:

timestamp without time zone

I det här fallet kontrollerade jag datatypen för actor.last_update kolumnen i pagila exempeldatabas.

Låt oss kolla en annan kolumn:

SELECT pg_typeof(name)
FROM language
LIMIT 1;

Resultat:

character

Den här kolumnen visas som bpchar i mitt gränssnitt, vilket tydligen är det interna typnamnet för CHAR(n) .

Förresten, du kan fråga information_schema.columns för datatypen för en kolumn.

Därför kan vi använda följande fråga istället:

SELECT 
  column_name, 
  data_type 
FROM information_schema.columns
WHERE table_name = 'language';

Resultat:

 column_name |          data_type          
-------------+-----------------------------
 language_id | integer
 name        | character
 last_update | timestamp without time zone

I det här fallet returnerade jag datatypen för alla kolumner i tabellen.


  1. SQLite Query i Android med hjälp av markören

  2. Konfigurera Hibernate för att använda Oracles SYS_GUID() för primärnyckel

  3. SQL-fråga för att hitta den n:e högsta lönen från en lönetabell

  4. Få antalet dagar mellan två datum i Oracle, inklusive datumen