Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

8.15. kèo bóng đá hôm nay và ngày mai

PostgreSQLCho phép các cột của bảng được xác định là kèo bóng đá hôm nay và ngày mai đa chiều dài thay đổi. Các kèo bóng đá hôm nay và ngày mai thuộc bất kỳ loại cơ sở, loại enum, loại tổng hợp, loại phạm vi hoặc miền có thể được xác định bởi người dùng.

8.15.1. Khai báo các loại kèo bóng đá hôm nay và ngày mai

Để minh họa việc sử dụng các loại kèo bóng đá hôm nay và ngày mai, chúng tôi tạo bảng này:

Tạo bảng SAL_EMP (

Như được hiển thị, một kiểu dữ liệu kèo bóng đá hôm nay và ngày mai được đặt tên bằng cách nối các dấu ngoặc vuông ([]) đến tên kiểu dữ liệu của các phần tử kèo bóng đá hôm nay và ngày mai. Lệnh trên sẽ tạo một bảng có tênSAL_EMPVới một cột loạiText(tên), một kèo bóng đá hôm nay và ngày mai một chiều của loạiSố nguyên(pay_by_quarter), đại diện cho tiền lương của nhân viên theo quý và một kèo bóng đá hôm nay và ngày mai hai chiềuText(Lịch trình), đại diện cho lịch trình hàng tuần của nhân viên.

Cú pháp choTạo bảngCho phép kích thước chính xác của kèo bóng đá hôm nay và ngày mai được chỉ định, ví dụ:

Tạo bảng Tictactoe (

Tuy nhiên, việc triển khai hiện tại bỏ qua mọi giới hạn kích thước kèo bóng đá hôm nay và ngày mai được cung cấp, tức là, hành vi này giống như đối với các kèo bóng đá hôm nay và ngày mai có độ dài không xác định.

Việc triển khai hiện tại cũng không thực thi số lượng kích thước được khai báo. Các kèo bóng đá hôm nay và ngày mai thuộc loại phần tử cụ thể đều được coi là cùng loại, bất kể kích thước hoặc số lượng kích thước.Tạo bảngchỉ đơn giản là tài liệu; nó không ảnh hưởng đến hành vi thời gian chạy.

một cú pháp thay thế, phù hợp với tiêu chuẩn SQL bằng cách sử dụng từ khóakèo bóng đá hôm nay và ngày mai, có thể được sử dụng cho các kèo bóng đá hôm nay và ngày mai một chiều.pay_by_quarterCó thể đã được định nghĩa là:

pay_by_quarter kèo bóng đá hôm nay và ngày mai số nguyên [4],

Hoặc, nếu không có kích thước kèo bóng đá hôm nay và ngày mai nào được chỉ định:

pay_by_quarter kèo bóng đá hôm nay và ngày mai số nguyên,

Tuy nhiên, như trước đây,PostgreSQLKhông thực thi hạn chế kích thước trong mọi trường hợp.

8.15.2. Đầu vào giá trị kèo bóng đá hôm nay và ngày mai

Để viết giá trị kèo bóng đá hôm nay và ngày mai dưới dạng hằng số theo nghĩa đen, đặt các giá trị phần tử trong niềng răng xoăn và tách chúng bằng dấu phẩy. .

'Val1 Delim Val2 Delim... '

WHEREDelimlà ký tự phân cách cho loại, như được ghi trong của nópg_typemục nhập. Trong số các loại dữ liệu tiêu chuẩn được cung cấp trongPostgreSQLPhân phối, tất cả đều sử dụng dấu phẩy (,), ngoại trừ loạiBoxsử dụng dấu chấm phẩy (;). MỗiVallà hằng số của loại phần tử kèo bóng đá hôm nay và ngày mai hoặc subarray. Một ví dụ về hằng số kèo bóng đá hôm nay và ngày mai là:

'1,2,3, 4,5,6, 7,8,9'

Hằng số này là một kèo bóng đá hôm nay và ngày mai hai chiều, 3 x 3 bao gồm ba số con số của số nguyên.

Để đặt phần tử của hằng số kèo bóng đá hôm nay và ngày mai thành null, viếtnullcho giá trị phần tử. (Bất kỳ biến thể trường hợp nào trên hoặc dưới củanullSẽ làm.) Nếu bạn muốn một giá trị chuỗi thực tếHồinull, bạn phải đặt dấu ngoặc kép xung quanh nó.

(Các loại hằng số kèo bóng đá hôm nay và ngày mai này thực sự chỉ là một trường hợp đặc biệt của các hằng số loại chung được thảo luận trongPhần 4.1.2.7. Hằng số ban đầu được coi là một chuỗi và được chuyển đến thói quen chuyển đổi đầu vào kèo bóng đá hôm nay và ngày mai.

Bây giờ chúng ta có thể hiển thị một sốChènCâu lệnh:

Chèn kèo bóng đá hôm nay và ngày maio sal_emp

Kết quả của hai lần chèn trước trông như thế này:

Chọn * từ sal_emp;

kèo bóng đá hôm nay và ngày mai đa chiều phải có phạm vi phù hợp cho mỗi chiều. Một sự không phù hợp gây ra lỗi, ví dụ:

Chèn kèo bóng đá hôm nay và ngày maio sal_emp

Thekèo bóng đá hôm nay và ngày maiCú pháp Constructor cũng có thể được sử dụng:

Chèn kèo bóng đá hôm nay và ngày maio sal_emp

Lưu ý rằng các phần tử kèo bóng đá hôm nay và ngày mai là các hằng số hoặc biểu thức SQL thông thường; Chẳng hạn, các chuỗi chữ được trích dẫn đơn, thay vì được trích dẫn gấp đôi vì chúng sẽ ở trong một kèo bóng đá hôm nay và ngày mai theo nghĩa đen.kèo bóng đá hôm nay và ngày maiCú pháp Constructor được thảo luận chi tiết hơn trongPhần 4.2.12.

8.15.3. Truy cập kèo bóng đá hôm nay và ngày mai

Bây giờ, chúng ta có thể chạy một số truy vấn trên bảng. Đầu tiên, chúng tôi chỉ ra cách truy cập một phần tử duy nhất của một kèo bóng đá hôm nay và ngày mai.

Chọn tên từ SAL_EMP trong đó pay_by_quarter [1] < pay_by_quarter [2];

Số đăng ký kèo bóng đá hôm nay và ngày mai được viết trong dấu ngoặc vuông. Theo mặc địnhPostgreSQLSử dụng quy ước đánh số một dựa trên cho các kèo bóng đá hôm nay và ngày mai, nghĩa là một kèo bóng đá hôm nay và ngày mainCác yếu tố bắt đầu bằngkèo bóng đá hôm nay và ngày mai [1]và kết thúc bằngkèo bóng đá hôm nay và ngày mai [n].

Truy vấn này lấy tiền lương quý thứ ba của tất cả nhân viên:

Chọn pay_by_quarter [3] từ sal_emp;

Chúng ta cũng có thể truy cập các lát hình chữ nhật tùy ý của một kèo bóng đá hôm nay và ngày mai hoặc subarrays. Một lát kèo bóng đá hôm nay và ngày mai được ký hiệu bằng cách viếtgiới hạn thấp hơn:giới hạn trêncho một hoặc nhiều kích thước kèo bóng đá hôm nay và ngày mai. Ví dụ: Truy vấn này lấy mục đầu tiên trong lịch trình của Bill trong hai ngày đầu tiên trong tuần:

Chọn Lịch trình [1: 2] [1: 1] từ SAL_EMP trong đó pay_by_quarter | = 'Bill';

Nếu bất kỳ thứ nguyên nào được viết dưới dạng một lát cắt, tức là, chứa một dấu hai chấm, thì tất cả các chiều đều được coi là lát cắt. Bất kỳ kích thước nào chỉ có một số duy nhất (không có dấu hai chấm) được coi là từ 1 đến số được chỉ định.[2]được coi là[1: 2], như trong ví dụ này:

Chọn Lịch trình [1: 2] [2] từ SAL_EMP trong đó Tên = 'Bill';

Để tránh sự nhầm lẫn với trường hợp không phải là lát, tốt nhất là sử dụng cú pháp lát cắt cho tất cả các chiều, ví dụ:[1: 2] [1: 1], không[2] [1: 1].

Có thể bỏ quagiới hạn thấp hơnvà/hoặcgiới hạn trêncủa một nhà xác định lát cắt; Giới hạn bị thiếu được thay thế bằng giới hạn dưới hoặc trên của các chỉ số của kèo bóng đá hôm nay và ngày mai.

Lịch trình chọn [: 2] [2:] từ sal_emp trong đó tên = 'Bill';

21642_21883Lịch trìnhHiện tại có kích thước[1: 3] [1: 2]Sau đó tham khảoLịch trình [3] [3]mang lại NULL. Tương tự, một tham chiếu kèo bóng đá hôm nay và ngày mai với số lượng người đăng ký sai mang lại một null thay vì lỗi.

Một biểu thức lát kèo bóng đá hôm nay và ngày mai tương tự mang lại NULL nếu chính kèo bóng đá hôm nay và ngày mai hoặc bất kỳ biểu thức nào trong số các biểu thức phụ là null. Tuy nhiên, trong các trường hợp khác như chọn một lát kèo bóng đá hôm nay và ngày mai hoàn toàn bên ngoài giới hạn kèo bóng đá hôm nay và ngày mai hiện tại, một biểu thức lát cắt mang lại một kèo bóng đá hôm nay và ngày mai trống (không chiều) thay vì null.

Kích thước hiện tại của bất kỳ giá trị kèo bóng đá hôm nay và ngày mai nào cũng có thể được truy xuất vớimảng_dimschức năng:

chọn Array_DIMS (Lịch trình) từ sal_emp trong đó name = 'carol';

Array_DIMSSản xuất ATextKết quả, thuận tiện cho mọi người đọc nhưng có lẽ bất tiện cho các chương trình. Kích thước cũng có thể được truy xuất vớimảng_upperArray_Lower, trả về giới hạn trên và dưới của một kích thước kèo bóng đá hôm nay và ngày mai được chỉ định, tương ứng:

chọn Array_UPPER (Lịch trình, 1) từ SAL_EMP trong đó Tên = 'Carol';

Array_lengthSẽ trả về chiều dài của một kích thước kèo bóng đá hôm nay và ngày mai được chỉ định:

chọn Array_Lpm (Lịch trình, 1) từ Sal_emp trong đó Tên = 'Carol';

CardinalityTrả về tổng số phần tử trong một kèo bóng đá hôm nay và ngày mai trên tất cả các kích thước. Nó thực sự là số lượng hàng gọi đếnUnnestsẽ mang lại:

Chọn Cardinality (Lịch trình) từ SAL_EMP trong đó Tên = 'Carol';

8.15.4. Sửa đổi kèo bóng đá hôm nay và ngày mai

24458_24502

CẬP NHẬT SAL_EMP SET PAY_BY_QUARTER = '25000,25000,27000,27000'

hoặc sử dụngkèo bóng đá hôm nay và ngày maiBiểu thức cú pháp:

Cập nhật SAL_EMP SET PAY_BY_QUARTER = kèo bóng đá hôm nay và ngày mai [25000,25000,27000,27000]

Một kèo bóng đá hôm nay và ngày mai cũng có thể được cập nhật tại một phần tử duy nhất:

CẬP NHẬT SAL_EMP SET PAY_BY_QUARTER [4] = 15000

hoặc được cập nhật trong một lát:

CẬP NHẬT SAL_EMP SET PAY_BY_QUARTER [1: 2] = '27000,27000'

Cú pháp lát cắt bị bỏ quagiới hạn thấp hơnvà/hoặcgiới hạn trêncũng có thể được sử dụng, nhưng chỉ khi cập nhật giá trị kèo bóng đá hôm nay và ngày mai không phải là null hoặc không chiều (nếu không, không có giới hạn đăng ký hiện có để thay thế).

Một giá trị kèo bóng đá hôm nay và ngày mai được lưu trữ có thể được mở rộng bằng cách gán cho các phần tử chưa có. Bất kỳ vị trí nào giữa các yếu tố hiện tại và các yếu tố mới được chỉ định sẽ được lấp đầy bằng null.MyArrayHiện tại có 4 yếu tố, nó sẽ có sáu yếu tố sau khi cập nhật gán choMyArray [6];MyArray [5]sẽ chứa null. Hiện tại, việc mở rộng theo kiểu này chỉ được phép cho các kèo bóng đá hôm nay và ngày mai một chiều, không phải kèo bóng đá hôm nay và ngày mai đa chiều.

Bài tập được đăng ký cho phép tạo các kèo bóng đá hôm nay và ngày mai không sử dụng các chỉ số một dựa trên. Ví dụ, người ta có thể gán choMyArray [-2: 7]Để tạo một kèo bóng đá hôm nay và ngày mai có giá trị đăng ký từ -2 đến 7.

Giá trị kèo bóng đá hôm nay và ngày mai mới cũng có thể được xây dựng bằng toán tử nối,||:

Chọn kèo bóng đá hôm nay và ngày mai [1,2] || kèo bóng đá hôm nay và ngày mai [3,4];

toán tử nối cho phép một phần tử duy nhất được đẩy vào đầu hoặc cuối của một kèo bóng đá hôm nay và ngày mai một chiều. Nó cũng chấp nhận hain-Dimensional kèo bóng đá hôm nay và ngày mai hoặcn-Dimensional và ann+1-Dimensional Array.

Khi một phần tử được đẩy vào đầu hoặc đầu của kèo bóng đá hôm nay và ngày mai một chiều, kết quả là một kèo bóng đá hôm nay và ngày mai có cùng một chỉ số giới hạn dưới với toán hạng kèo bóng đá hôm nay và ngày mai. Ví dụ:

chọn Array_DIMS (1 || '[0: 1] = 2,3' :: int []);

Khi hai kèo bóng đá hôm nay và ngày mai có số lượng kích thước bằng nhau được nối, kết quả vẫn giữ được chỉ số giới hạn dưới của kích thước bên ngoài của toán hạng bên trái. Kết quả là một kèo bóng đá hôm nay và ngày mai bao gồm mọi yếu tố của toán hạng bên trái, theo sau là mọi yếu tố của toán hạng bên phải.

chọn Array_DIMS (kèo bóng đá hôm nay và ngày mai [1,2] || kèo bóng đá hôm nay và ngày mai [3,4,5]);

khi mộtn-Dimensional kèo bóng đá hôm nay và ngày mai được đẩy vào đầu hoặc cuối củan+1-Dimensional kèo bóng đá hôm nay và ngày mai, kết quả tương tự như trường hợp kèo bóng đá hôm nay và ngày mai phần tử ở trên. Mỗin28198_28256n+1kích thước bên ngoài của kèo bóng đá hôm nay và ngày mai -dimensional. Ví dụ:

chọn Array_DIMS (kèo bóng đá hôm nay và ngày mai [1,2] || kèo bóng đá hôm nay và ngày mai [[3,4], [5,6]]);

Một kèo bóng đá hôm nay và ngày mai cũng có thể được xây dựng bằng cách sử dụng các chức năngArray_Prepend, Array_Appendhoặcmảng_cat. Hai đầu tiên chỉ hỗ trợ các kèo bóng đá hôm nay và ngày mai một chiều, nhưngmảng_catHỗ trợ các kèo bóng đá hôm nay và ngày mai đa chiều. Một số ví dụ:

chọn Array_Prepend (1, kèo bóng đá hôm nay và ngày mai [2,3]);

Trong các trường hợp đơn giản, toán tử nối được thảo luận ở trên được ưu tiên sử dụng trực tiếp các chức năng này. Tuy nhiên, vì toán tử kết hợp bị quá tải để phục vụ cả ba trường hợp, nên có những tình huống sử dụng một trong các chức năng là hữu ích để tránh sự mơ hồ.

Chọn Array [1, 2] || '3, 4';

Trong các ví dụ trên, trình phân tích cú pháp nhìn thấy một kèo bóng đá hôm nay và ngày mai số nguyên ở một bên của toán tử nối và một loại không thể xác định được ở bên kia. Heuristic mà nó sử dụng để giải quyết loại của hằng số là giả sử nó cùng loại với đầu vào khác của người vận hành - trong trường hợp này là kèo bóng đá hôm nay và ngày mai số nguyên.mảng_cat, khôngArray_Append. Khi đó là lựa chọn sai, nó có thể được sửa bằng cách đúc hằng số vào loại phần tử của kèo bóng đá hôm nay và ngày mai;Array_Appendcó thể là một giải pháp thích hợp hơn.

8.15.5. Tìm kiếm trong kèo bóng đá hôm nay và ngày mai

Để tìm kiếm giá trị trong một kèo bóng đá hôm nay và ngày mai, mỗi giá trị phải được kiểm tra. Điều này có thể được thực hiện thủ công, nếu bạn biết kích thước của kèo bóng đá hôm nay và ngày mai.

Chọn * từ SAL_EMP WHERE PAY_BY_QUARTER [1] = 10000 hoặc

Tuy nhiên, điều này nhanh chóng trở nên tẻ nhạt đối với các kèo bóng đá hôm nay và ngày mai lớn và không hữu ích nếu kích thước của kèo bóng đá hôm nay và ngày mai không rõ. Một phương pháp thay thế được mô tả trongPhần 9,23. Truy vấn trên có thể được thay thế bằng:

Chọn * từ SAL_EMP WHERE 10000 = Any (pay_by_quarter);

Ngoài ra, bạn có thể tìm thấy các hàng trong đó kèo bóng đá hôm nay và ngày mai có tất cả các giá trị bằng 10000 với:

Chọn * từ SAL_EMP WHERE 10000 = all (pay_by_quarter);

Ngoài ra,Generate_subscriptscó thể sử dụng chức năng. Ví dụ:

Chọn * Từ

Hàm này được mô tả trongBảng 9.59.

Bạn cũng có thể tìm kiếm một kèo bóng đá hôm nay và ngày mai bằng&&toán tử, trong đó kiểm tra xem toán hạng bên trái có chồng chéo với toán hạng bên phải hay không. Ví dụ:

Chọn * từ SAL_EMP trong đó pay_by_quarter && kèo bóng đá hôm nay và ngày mai [10000];

Các toán tử kèo bóng đá hôm nay và ngày mai này và khác được mô tả thêm trongPhần 9,18. Nó có thể được tăng tốc bởi một chỉ mục thích hợp, như được mô tả trongPhần 11.2.

Bạn cũng có thể tìm kiếm các giá trị cụ thể trong một kèo bóng đá hôm nay và ngày mai bằng cách sử dụngArray_PocationArray_Pocationschức năng. Trước đây trả về chỉ số của lần xuất hiện đầu tiên của một giá trị trong một kèo bóng đá hôm nay và ngày mai;

33630_33854

TIP

kèo bóng đá hôm nay và ngày mai không phải là bộ; Tìm kiếm các yếu tố kèo bóng đá hôm nay và ngày mai cụ thể có thể là một dấu hiệu của cơ sở dữ liệu sai lệch.

8.15.6. kèo bóng đá hôm nay và ngày mai đầu vào và cú pháp đầu ra

Biểu diễn văn bản bên ngoài của giá trị kèo bóng đá hôm nay và ngày mai bao gồm các mục được giải thích theo các quy tắc chuyển đổi I/O cho loại phần tử của kèo bóng đá hôm nay và ngày mai, cộng với trang trí cho biết cấu trúc kèo bóng đá hôm nay và ngày mai. Trang trí bao gồm niềng răng xoăn () Xung quanh giá trị kèo bóng đá hôm nay và ngày mai cộng với các ký tự phân cách giữa các mục liền kề. Ký tự phân định thường là dấu phẩy (,) Nhưng có thể là một cái gì đó khác: Nó được xác định bởitypdelimCài đặt cho loại phần tử của kèo bóng đá hôm nay và ngày mai. Trong số các loại dữ liệu tiêu chuẩn được cung cấp trongPOSTGRESQLPhân phối, tất cả đều sử dụng dấu phẩy, ngoại trừ loạiBox, sử dụng dấu chấm phẩy (;). Trong một kèo bóng đá hôm nay và ngày mai đa chiều, mỗi thứ nguyên (hàng, mặt phẳng, khối lập phương, v.v.) có mức độ niềng răng riêng của riêng mình và các dấu phân cách phải được viết giữa các thực thể giằng xoăn liền kề của cùng cấp độ.

Thói quen đầu ra kèo bóng đá hôm nay và ngày mai sẽ đặt dấu ngoặc kép xung quanh các giá trị phần tử nếu chúng là chuỗi trống, chứa niềng răng xoăn, ký tự phân cách, trích dẫn đôi, dấu gạch chéo ngược hoặc không gian trắng hoặc khớp với từnull. Báo giá kép và dấu gạch chéo ngược được nhúng trong các giá trị phần tử sẽ được trừ lại.

Theo mặc định, giá trị chỉ mục giới hạn dưới của kích thước của một kèo bóng đá hôm nay và ngày mai được đặt thành một. Để biểu diễn các kèo bóng đá hôm nay và ngày mai có giới hạn dưới khác, các phạm vi đăng ký kèo bóng đá hôm nay và ngày mai có thể được chỉ định rõ ràng trước khi viết nội dung kèo bóng đá hôm nay và ngày mai.[]) Xung quanh mỗi giới hạn dưới và trên của kích thước kèo bóng đá hôm nay và ngày mai, với dấu hai chấm (:) ký tự dấu phân cách ở giữa. Trang trí kích thước kèo bóng đá hôm nay và ngày mai được theo sau bởi một dấu bằng (=). Ví dụ:

Chọn F1 [1] [-2] [3] AS E2, F1 [1] [-1] [5]

Thói quen đầu ra kèo bóng đá hôm nay và ngày mai sẽ bao gồm các kích thước rõ ràng trong kết quả của nó chỉ khi có một hoặc nhiều giới hạn dưới khác với một.

Nếu giá trị được viết cho một phần tử lànull(Trong mọi trường hợp biến thể), phần tử được coi là null. Sự hiện diện của bất kỳ trích dẫn hoặc dấu gạch chéo ngược nào vô hiệu hóa điều này và cho phép giá trị chuỗi theo nghĩa đennullsẽ được nhập. Ngoài ra, để tương thích ngược với phiên bản trước 8.2 củaPOSTGRESQL, Themảng_nullsTham số cấu hình có thể được bậtTẮTĐể đàn áp nhận dạngnullnhư một null.

Như được hiển thị trước đây, khi viết một giá trị kèo bóng đá hôm nay và ngày mai, bạn có thể sử dụng dấu ngoặc kép xung quanh bất kỳ phần tử kèo bóng đá hôm nay và ngày mai riêng lẻ nào. BạnphảiLàm như vậy nếu giá trị phần tử sẽ nhầm lẫn trình phân tích cú pháp giá trị kèo bóng đá hôm nay và ngày mai. Ví dụ, các phần tử chứa niềng răng xoăn, dấu phẩy (hoặc ký tự phân cách của loại dữ liệu), trích dẫn kép, dấu gạch chéo ngược hoặc khoảng trắng dẫn đầu hoặc dấu vết phải được trích dẫn kép.nullcũng phải được trích dẫn. Để đặt một báo giá kép hoặc dấu gạch chéo ngược trong một giá trị phần tử kèo bóng đá hôm nay và ngày mai được trích dẫn, đi trước nó bằng một dấu gạch chéo ngược.

Bạn có thể thêm khoảng trắng trước khi nẹp trái hoặc sau khi nẹp phải. Bạn cũng có thể thêm khoảng trắng trước hoặc sau bất kỳ chuỗi mục riêng lẻ nào.

tip

Thekèo bóng đá hôm nay và ngày maiCú pháp Constructor (xemPhần 4.2.12) thường dễ làm việc hơn so với cú pháp theo nghĩa chính của kèo bóng đá hôm nay và ngày mai khi viết các giá trị kèo bóng đá hôm nay và ngày mai trong các lệnh SQL. TRONGkèo bóng đá hôm nay và ngày mai, Các giá trị phần tử riêng lẻ được viết giống như cách chúng sẽ được viết khi không phải là thành viên của một kèo bóng đá hôm nay và ngày mai.