PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách pg_typeof () hoạt động trong PostgreSQL

Trong PostgreSQL, pg_typeof() cho phép bạn nhận được kiểu dữ liệu của bất kỳ giá trị nào.

Cụ thể hơn, nó trả về OID của kiểu dữ liệu của giá trị được chuyển cho nó. Nó trả về một regtype , là một loại bí danh OID. Do đó, nó giống như OID cho mục đích so sánh nhưng hiển thị dưới dạng tên loại.

Cú pháp

Hàm có cú pháp sau:

pg_typeof(any)

Ở đâu any là bất kỳ giá trị nào.

Ví dụ

Đây là một ví dụ cơ bản để chứng minh.

SELECT pg_typeof(100);

Kết quả:

integer

Chuỗi tùy ý

Trong Postgres, có nhiều loại chuỗi (ví dụ:char , varchar , text ). Do đó, bạn không thể chỉ đặt một đối số trong các dấu ngoặc kép và mong đợi đối số biết kiểu dữ liệu của nó là gì.

SELECT pg_typeof('Elephant'); 

Kết quả:

unknown

Do đó, bạn sẽ cần chỉ định loại dữ liệu thực tế của nó.

SELECT pg_typeof('Elephant'::varchar); 

Kết quả:

character varying

Trong Postgres, ký tự character varying là tên của varchar (thực ra, varchar là bí danh cho ký tự character varying ).

Ví dụ cuối cùng này hơi thừa, vì tôi đã nêu rõ loại biến, có nghĩa là tôi đã biết kết quả sẽ như thế nào.

Trong thế giới thực, có nhiều khả năng bạn đang cố lấy loại dữ liệu của một biến.

Loại trả về của một biến

Trong ví dụ này, tôi đặt chuỗi trước đó vào một biến, sau đó lấy kiểu dữ liệu của nó.

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

Kết quả:

NOTICE: Value: Elephant
Type: character varying

Đây là một lần nữa, ngoại trừ việc tôi thay đổi kiểu dữ liệu thành một kiểu chuỗi khác (char(8) ).

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

Kết quả:

NOTICE: Value: Elephant
Type: character

Giá trị Boolean

Dưới đây là một ví dụ về việc cung cấp giá trị boolean một cách rõ ràng.

SELECT 
  pg_typeof(true),
  pg_typeof(false); 

Kết quả:

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

Kiểu trả về của một hàm

Một lần nữa, không chắc bạn sẽ cung cấp true một cách rõ ràng hoặc false đến chức năng này. Nhiều khả năng nó sẽ đến từ một biến.

Nhưng bạn cũng có thể sử dụng pg_typeof() để tìm ra kiểu trả về của một hàm.

Đây là một ví dụ.

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

Kết quả:

boolean

Trong trường hợp này, tôi đã vượt qua isfinite() hàm cho pg_typeof() hoạt động như đối số của nó.

Và đây là một ví dụ khác. Trong cái này, tôi nhận được kiểu dữ liệu của giá trị trả về của make_date() chức năng.

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

Kết quả:

date

Kiểu dữ liệu của cột

Dưới đây là một ví dụ về việc trả về kiểu dữ liệu của một cột cơ sở dữ liệu.

SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;

Kết quả:

timestamp without time zone

Trong trường hợp này, tôi đã kiểm tra kiểu dữ liệu của actor.last_update trong pagila cơ sở dữ liệu mẫu.

Hãy kiểm tra một cột khác:

SELECT pg_typeof(name)
FROM language
LIMIT 1;

Kết quả:

character

Cột này hiển thị dưới dạng bpchar trong giao diện của tôi, đây rõ ràng là tên loại nội bộ cho CHAR(n) .

Nhân tiện, bạn có thể truy vấn information_schema.columns cho kiểu dữ liệu của một cột.

Do đó, chúng tôi có thể sử dụng truy vấn sau để thay thế:

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

Kết quả:

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

Trong trường hợp này, tôi đã trả lại kiểu dữ liệu cho tất cả các cột trong bảng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres không sử dụng chỉ mục khi quét chỉ mục là tùy chọn tốt hơn nhiều

  2. Làm cách nào để nhập mô-đun hoặc cài đặt tiện ích mở rộng trong Postgres?

  3. Có gì mới trong PostgreSQL 12

  4. Làm cách nào để so sánh ngày trong các trường datetime trong Postgresql?

  5. Cách làm việc với cơ sở dữ liệu PostgreSQL