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

Postgres:xác định giá trị mặc định cho lỗi CAST?

Không có giá trị mặc định cho CAST:

Kiểu ép kiểu chỉ định một chuyển đổi từ kiểu dữ liệu này sang kiểu dữ liệu khác. PostgreSQL chấp nhận hai cú pháp tương đương cho kiểu phôi:

CAST ( expression AS type )
expression::type

Không có chỗ trong cú pháp cho bất kỳ thứ gì khác ngoài biểu thức được truyền và kiểu đích mong muốn.

Tuy nhiên, bạn có thể làm điều đó bằng tay với một chức năng đơn giản:

create or replace function cast_to_int(text, integer) returns integer as $$
begin
    return cast($1 as integer);
exception
    when invalid_text_representation then
        return $2;
end;
$$ language plpgsql immutable;

Sau đó, bạn có thể nói những thứ như cast_to_int('pancakes', 0) và nhận 0 .

PostgreSQL cũng cho phép bạn tạo phôi của riêng mình để bạn có thể làm những việc như sau:

create or replace function cast_to_int(text) returns integer as $$
begin
    -- Note the double casting to avoid infinite recursion.
    return cast($1::varchar as integer);
exception
    when invalid_text_representation then
        return 0;
end;
$$ language plpgsql immutable;

create cast (text as integer) with function cast_to_int(text);

Sau đó, bạn có thể nói

select cast('pancakes'::text as integer)

và nhận 0 hoặc bạn có thể nói

select cast(some_text_column as integer) from t

và nhận 0 cho some_text_column giá trị không phải là số nguyên hợp lệ. Nếu bạn muốn truyền varchar bằng cách sử dụng kiểu truyền mặc định tự động này thì bạn phải truyền hai lần:

select cast(some_varchar::text as integer) from t

Chỉ vì bạn có thể làm được điều này không phải là một ý tưởng hay. Tôi không nghĩ rằng việc thay thế văn bản tiêu chuẩn thành kiểu ép số nguyên là ý tưởng tốt nhất từ ​​trước đến nay. Cách tiếp cận trên cũng yêu cầu bạn để lại varchar tiêu chuẩn thành integer truyền một mình, bạn có thể giải quyết vấn đề đó nếu bạn muốn tự mình thực hiện toàn bộ quá trình chuyển đổi thay vì lười biếng chuyển sang tính năng truyền được xây dựng sẵn.

Xử lý NULL được để lại như một bài tập (dễ) cho người đọc.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nguyên nhân nào gây ra lỗi Thêm không được nhận dạng ... khi chạy Postgresql 11 trên máy Windows?

  2. Chỉ mục một phần không được sử dụng trong mệnh đề ON CONFLICT khi thực hiện nâng cấp trong Postgresql

  3. pgAdmin Alternatives - PostgreSQL Database Management GUI ClusterControl

  4. Không tốt nhất mảng theo một cấp độ

  5. Thêm năm vào một ngày trong PostgreSQL