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

Làm thế nào để ép kiểu mảng json sang mảng văn bản?

thử json_array_elements_text thay vì json_array_elements và bạn không cần truyền rõ ràng sang văn bản (x::text ), vì vậy bạn có thể sử dụng:

CREATE or replace FUNCTION json_array_castext(json) RETURNS text[] AS $f$
    SELECT array_agg(x) FROM json_array_elements_text($1) t(x);
$f$ LANGUAGE sql IMMUTABLE;

Đối với câu hỏi bổ sung của bạn

Tại sao x ::text không phải là một tập hợp?

Điều này được truyền và vì điều này, nó không gây ra bất kỳ lỗi nào, nhưng khi truyền chuỗi json thành văn bản như thế này:::text , postgres thêm dấu ngoặc kép vào giá trị.

Chỉ cho mục đích thử nghiệm, hãy thay đổi lại chức năng của bạn về nguyên bản (như câu hỏi của bạn) và thử:

SELECT  
(json_array_castext('["hello","world"]'))[1] = 'hello',
(json_array_castext('["hello","world"]'))[1],
'hello'

Như bạn thấy, (json_array_castext('["hello","world"]'))[1] đưa ra "hello" thay vì hello . và đây là lý do tại sao bạn nhận được false khi so sánh các giá trị đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:KHÔNG VÀO so với EXCEPT sự khác biệt về hiệu suất (đã chỉnh sửa # 2)

  2. Các slide thảo luận:Cải tiến phân vùng trong PostgreSQL 11

  3. Cách khử trùng SQL thô trong Rails 4

  4. pgmemcache so với Infinite Cache

  5. Sử dụng docker-soạn để tạo bảng trong cơ sở dữ liệu postgresql