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

Cách hoạt động của hàm to_number () trong PostgreSQL

Trong PostgreSQL, bạn có thể sử dụng to_number() hàm để chuyển đổi một chuỗi thành một giá trị số.

Cụ thể hơn, nó chuyển đổi biểu diễn chuỗi của một số thành một giá trị số.

Ví dụ:nếu bạn có $1,234.50 dưới dạng một chuỗi, bạn có thể sử dụng to_number() để chuyển đổi số đó thành một số thực sử dụng số kiểu dữ liệu.

Cú pháp

Cú pháp như sau:

to_number(text, text)

Trong đó đối số đầu tiên là biểu diễn chuỗi của số và đối số thứ hai xác định mẫu mà đối số đầu tiên sử dụng.

Ví dụ

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

SELECT to_number('80', '99');

Kết quả:

80

Trong trường hợp này, tôi đã sử dụng 99 như mẫu. Mỗi 9 được gọi là "mẫu khuôn mẫu". 9 mẫu biểu thị một vị trí chữ số. Tôi đã sử dụng hai chữ số vì tôi muốn bao gồm cả hai chữ số.

Đây là những gì sẽ xảy ra nếu tôi xóa một trong các 9 s.

SELECT to_number('80', '9');

Kết quả:

8

Vì vậy, điều quan trọng là phải đưa số lượng mẫu chính xác vào mẫu.

Dấu phân tách nhóm và dấu thập phân

Khi làm việc với các số lớn hơn và / hoặc các số có phân số giây, bạn sẽ cần bao gồm các mẫu mẫu chỉ định dấu phân tách nhóm và / hoặc dấu thập phân.

Có hai cách bạn có thể làm điều này.

Tùy chọn đầu tiên là gõ dấu phẩy và dấu thập phân theo đúng nghĩa đen.

SELECT to_number('7,000.25', '9,999.99');

Kết quả:

7000.25

Tùy chọn thứ hai là sử dụng các phiên bản nhận biết ngôn ngữ. Đây là G cho dấu phân tách nhóm (dấu phân cách hàng nghìn) và D cho dấu thập phân.

Vì vậy, ví dụ trước có thể được viết lại như sau:

SELECT to_number('7,000.25', '9G999D99');

Kết quả:

7000.25

Ký hiệu tiền tệ

L mẫu mẫu đại diện cho một ký hiệu tiền tệ nhận biết ngôn ngữ.

SELECT to_number('$7,000.25', 'L9G999D99');

Kết quả:

7000.25

Loại trả lại

Giá trị trả về của to_number() hàm là số.

Bạn có thể kiểm tra kiểu trả về bằng pg_typeof() chức năng.

SELECT pg_typeof(to_number('$7,000.25', 'L9G999D99'));

Kết quả:

numeric

Kết quả không mong muốn?

Điều quan trọng là làm cho đúng mẫu. Nếu không, bạn có thể nhận được kết quả không mong muốn.

Dưới đây là một ví dụ về điều gì sẽ xảy ra nếu tôi chỉ quên bao gồm L mẫu từ ví dụ trước đó.

SELECT to_number('$7,000.25', '9G999D99');

Kết quả:

7000

Vì tôi đã quên bao gồm L mẫu mẫu (cho đơn vị tiền tệ), điều này khiến toàn bộ mẫu không đồng bộ với số, dẫn đến G bị bỏ qua, cũng như D .

Chỉ cần nói rõ, đây là một lần nữa khi so sánh với mẫu chính xác.

SELECT 
  to_number('$7,000.25', 'L9G999D99') AS "Right",
  to_number('$7,000.25', '9G999D99') AS "Wrong";

Kết quả:

   Right | Wrong
---------+-------
 7000.25 | 7000

to_number () so với cast ()

to_number() chức năng được cung cấp chủ yếu để xử lý các định dạng đầu vào không thể chuyển đổi bằng cách truyền đơn giản. Do đó, nó thường không cần thiết đối với các biểu diễn số tiêu chuẩn.

Vì vậy, ví dụ đầu tiên trên trang này có thể được thực hiện bằng cách sử dụng cast() .

SELECT cast('80' AS NUMERIC);

Kết quả:

80

Nhưng chúng tôi bắt đầu gặp rắc rối khi mọi thứ trở nên phức tạp hơn một chút.

SELECT cast('$7,000.25' AS NUMERIC);

Kết quả:

ERROR: invalid input syntax for type numeric: "$7,000.25"
LINE 1: SELECT cast('$7,000.25' AS NUMERIC);

Vì vậy, to_number() chủ yếu được thiết kế cho các tình huống như tình huống này.

Danh sách đầy đủ các mẫu &công cụ sửa đổi mẫu

Postgres bao gồm nhiều mẫu khuôn mẫu và công cụ sửa đổi.

Chúng cũng có thể được sử dụng khi định dạng các giá trị số (ví dụ:khi sử dụng to_char() hàm để trả về biểu diễn chuỗi được định dạng của số).

Xem Mẫu &Công cụ sửa đổi Mẫu cho Định dạng Số trong PostgreSQL để biết danh sách đầy đủ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pandas cập nhật sql

  2. Làm thế nào để khai báo các biến cục bộ trong postgresql?

  3. Làm cách nào để thay đổi kiểu dữ liệu trong PostgreSQL?

  4. Tìm cha mẹ một cách đệ quy bằng cách sử dụng Truy vấn

  5. TẠO NGÔN NGỮ plpython3u - PostgreSQL 9.6