Dấu thời gian mysql ít hơn

Giả sử bạn muốn lấy số liệu thống kê theo tháng. Nhóm truy vấn này theo tháng và đếm số lượng khách truy cập (hồ sơ) trong mỗi tháng. Chúng tôi sắp xếp theo kỷ nguyên để nhận được tất cả các kết quả theo đúng thứ tự

SELECT DISTINCT FROM_UNIXTIME(epoch,"%M, %Y") AS month, count(*) as numberOfVisits
FROM mytable
GROUP BY month
ORDER BY epoch

kết quả này

November, 2008   3
December, 2008   1

Có thể dễ dàng thay đổi truy vấn này để lấy số liệu thống kê theo năm, theo ngày, theo ngày trong tuần, theo giờ trong ngày, v.v. Ví dụ: để nhận số liệu thống kê hàng năm, hãy thay đổi truy vấn thành

SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch

Thêm một bản ghi mới vào cơ sở dữ liệu của chúng tôi

Sử dụng hàm UNIX_TIMESTAMP() để chuyển đổi ngày/giờ của MySQL (chẳng hạn như bây giờ() = thời gian hiện tại) thành các kỷ nguyên

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))

hoặc sử dụng YYYY-MM-DD HH. MM. SS

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))

kỷ nguyên tiêu cực

Có một vấn đề lớn với MySQL. MySQL không thể chuyển đổi dấu thời gian Epoch âm (ngày trước 1-1-1970). Điều này tạo ra các vấn đề ví dụ như ngày sinh. Nhưng có cách giải quyết

Các loại phạm vi là các kiểu dữ liệu đại diện cho một phạm vi giá trị của một số loại phần tử (được gọi là kiểu con của phạm vi). Chẳng hạn, phạm vi của

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
2 có thể được sử dụng để biểu thị phạm vi thời gian mà một phòng họp được đặt trước. Trong trường hợp này, kiểu dữ liệu là
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
3 (viết tắt của “phạm vi dấu thời gian”) và
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
2 là kiểu con. Loại phụ phải có tổng thứ tự để nó được xác định rõ liệu các giá trị phần tử nằm trong, trước hay sau một phạm vi giá trị

Các loại phạm vi rất hữu ích vì chúng đại diện cho nhiều giá trị thành phần trong một giá trị phạm vi duy nhất và vì các khái niệm như phạm vi chồng lấp có thể được thể hiện rõ ràng. Việc sử dụng phạm vi thời gian và ngày tháng cho mục đích lập lịch biểu là ví dụ rõ ràng nhất;

Mỗi loại phạm vi có một loại đa phạm vi tương ứng. Một đa phạm vi là một danh sách có thứ tự các phạm vi không liền kề, không trống, không rỗng. Hầu hết các toán tử phạm vi cũng hoạt động trên nhiều phạm vi và chúng có một vài chức năng của riêng chúng

8. 17. 1. Các loại phạm vi và đa phạm vi tích hợp

PostgreSQL đi kèm với các loại phạm vi tích hợp sau

  • (lower-bound,upper-bound)
    (lower-bound,upper-bound]
    [lower-bound,upper-bound)
    [lower-bound,upper-bound]
    empty
    
    5 — Phạm vi của
    (lower-bound,upper-bound)
    (lower-bound,upper-bound]
    [lower-bound,upper-bound)
    [lower-bound,upper-bound]
    empty
    
    6,
    (lower-bound,upper-bound)
    (lower-bound,upper-bound]
    [lower-bound,upper-bound)
    [lower-bound,upper-bound]
    empty
    
    7 — Đa phạm vi tương ứng

  • (lower-bound,upper-bound)
    (lower-bound,upper-bound]
    [lower-bound,upper-bound)
    [lower-bound,upper-bound]
    empty
    
    8 — Phạm vi của
    (lower-bound,upper-bound)
    (lower-bound,upper-bound]
    [lower-bound,upper-bound)
    [lower-bound,upper-bound]
    empty
    
    9,
    November, 2008   3
    December, 2008   1
    
    30 — Đa phạm vi tương ứng

  • November, 2008   3
    December, 2008   1
    
    31 — Phạm vi của
    November, 2008   3
    December, 2008   1
    
    32,
    November, 2008   3
    December, 2008   1
    
    33 — Đa phạm vi tương ứng

  • (lower-bound,upper-bound)
    (lower-bound,upper-bound]
    [lower-bound,upper-bound)
    [lower-bound,upper-bound]
    empty
    
    3 — Phạm vi của
    November, 2008   3
    December, 2008   1
    
    35,
    November, 2008   3
    December, 2008   1
    
    36 — Đa phạm vi tương ứng

  • November, 2008   3
    December, 2008   1
    
    37 — Phạm vi của
    November, 2008   3
    December, 2008   1
    
    38,
    November, 2008   3
    December, 2008   1
    
    39 — Đa phạm vi tương ứng

  • SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
    FROM mytable
    GROUP BY year
    ORDER BY epoch
    
    30 — Phạm vi của
    SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
    FROM mytable
    GROUP BY year
    ORDER BY epoch
    
    31,
    SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
    FROM mytable
    GROUP BY year
    ORDER BY epoch
    
    32 — Đa phạm vi tương ứng

Ngoài ra, bạn có thể xác định các loại phạm vi của riêng mình;

SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
6

Xem Bảng 9. 54 và Bảng 9. 56 để biết danh sách đầy đủ các toán tử và hàm trên các loại phạm vi

8. 17. 3. Giới hạn bao gồm và độc quyền

Mỗi phạm vi không trống có hai giới hạn, giới hạn dưới và giới hạn trên. Tất cả các điểm giữa các giá trị này được bao gồm trong phạm vi. Một giới hạn bao gồm có nghĩa là điểm biên cũng được bao gồm trong phạm vi, trong khi một giới hạn loại trừ có nghĩa là điểm biên không được bao gồm trong phạm vi

Ở dạng văn bản của một phạm vi, giới hạn dưới bao gồm được biểu thị bằng “

SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
33” trong khi giới hạn dưới dành riêng được biểu thị bằng “
SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
34”. Tương tự như vậy, giới hạn trên bao gồm được biểu thị bằng “
SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
35”, trong khi giới hạn trên dành riêng được biểu thị bằng “
SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
36”. (Xem Phần 8. 17. 5 để biết thêm chi tiết. )

Hàm

SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
37 và
SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
38 lần lượt kiểm tra tính bao hàm của giới hạn dưới và giới hạn trên của một giá trị phạm vi

8. 17. 4. Phạm vi vô hạn (Không giới hạn)

Giới hạn dưới của một phạm vi có thể được bỏ qua, nghĩa là tất cả các giá trị nhỏ hơn giới hạn trên đều được bao gồm trong phạm vi, e. g. ,

SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
39. Tương tự, nếu giới hạn trên của phạm vi bị bỏ qua, thì tất cả các giá trị lớn hơn giới hạn dưới đều được bao gồm trong phạm vi. Nếu cả giới hạn dưới và giới hạn trên đều bị bỏ qua, tất cả các giá trị của loại phần tử được coi là nằm trong phạm vi. Chỉ định một giới hạn bị thiếu là bao gồm sẽ tự động được chuyển đổi thành độc quyền, e. g. ,
INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))
40 được chuyển đổi thành
INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))
41. Bạn có thể coi các giá trị bị thiếu này là +/-infinity, nhưng chúng là các giá trị loại phạm vi đặc biệt và được coi là nằm ngoài các giá trị +/-infinity của bất kỳ loại phần tử phạm vi nào

Các loại phần tử có khái niệm “vô cùng” có thể sử dụng chúng làm giá trị ràng buộc rõ ràng. Ví dụ: với phạm vi dấu thời gian,

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))
42 không bao gồm giá trị đặc biệt của
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
2 là
INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))
44, trong khi
INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))
45 bao gồm giá trị đó, cũng như
INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))
46 và
INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))
47

Các hàm

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))
48 và
INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))
49 lần lượt kiểm tra các giới hạn trên và dưới vô hạn của một phạm vi

8. 17. 5. Phạm vi Đầu vào/Đầu ra

Đầu vào cho một giá trị phạm vi phải tuân theo một trong các mẫu sau

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty

Dấu ngoặc đơn hoặc dấu ngoặc đơn cho biết giới hạn dưới và giới hạn trên là loại trừ hay bao gồm, như đã mô tả trước đây. Lưu ý rằng mẫu cuối cùng là

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))
50, đại diện cho một phạm vi trống (phạm vi không chứa điểm nào)

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))
51 có thể là một chuỗi đầu vào hợp lệ cho loại phụ hoặc trống để biểu thị không có giới hạn dưới. Tương tự như vậy,
INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))
52 có thể là một chuỗi đầu vào hợp lệ cho kiểu con hoặc trống để biểu thị không có giới hạn trên

Mỗi giá trị ràng buộc có thể được trích dẫn bằng ký tự

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))
53 (trích dẫn kép). Điều này là cần thiết nếu giá trị ràng buộc chứa dấu ngoặc đơn, dấu ngoặc vuông, dấu phẩy, dấu ngoặc kép hoặc dấu gạch chéo ngược, vì các ký tự này nếu không sẽ được coi là một phần của cú pháp phạm vi. Để đặt dấu ngoặc kép hoặc dấu gạch chéo ngược trong giá trị giới hạn được trích dẫn, hãy thêm dấu gạch chéo ngược vào trước giá trị đó. (Ngoài ra, một cặp dấu ngoặc kép trong giá trị giới hạn dấu ngoặc kép được dùng để biểu thị ký tự dấu ngoặc kép, tương tự như các quy tắc cho dấu ngoặc đơn trong chuỗi ký tự SQL. ) Ngoài ra, bạn có thể tránh trích dẫn và sử dụng tính năng thoát dấu gạch chéo ngược để bảo vệ tất cả các ký tự dữ liệu mà nếu không sẽ được coi là cú pháp phạm vi. Ngoài ra, để viết một giá trị giới hạn là một chuỗi rỗng, hãy viết
INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))
54, vì không viết gì có nghĩa là một giới hạn vô hạn

Khoảng trắng được cho phép trước và sau giá trị phạm vi, nhưng bất kỳ khoảng trắng nào giữa dấu ngoặc đơn hoặc dấu ngoặc vuông đều được coi là một phần của giá trị giới hạn dưới hoặc giới hạn trên. (Tùy thuộc vào loại phần tử, nó có thể có hoặc không đáng kể. )

Ghi chú

Các quy tắc này rất giống với các quy tắc để viết các giá trị trường bằng chữ kiểu tổng hợp. Xem Phần 8. 16. 6 cho bình luận bổ sung

ví dụ

November, 2008   3
December, 2008   1
3

Đầu vào cho đa phạm vi là dấu ngoặc nhọn (______455 và

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))
56) chứa 0 hoặc nhiều phạm vi hợp lệ, được phân tách bằng dấu phẩy. Khoảng trắng được phép xung quanh dấu ngoặc và dấu phẩy. Điều này nhằm mục đích gợi nhớ đến cú pháp mảng, mặc dù đa phạm vi đơn giản hơn nhiều. chúng chỉ có một chiều và không cần trích dẫn nội dung của chúng. (Tuy nhiên, các giới hạn của phạm vi của chúng có thể được trích dẫn như trên. )

ví dụ

SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
3

8. 17. 6. Xây dựng Ranges và Multiranges

Mỗi loại phạm vi có một hàm tạo có cùng tên với loại phạm vi. Việc sử dụng hàm xây dựng thường thuận tiện hơn là viết một hằng số phạm vi, vì nó tránh được nhu cầu trích dẫn thêm các giá trị bị ràng buộc. Hàm tạo chấp nhận hai hoặc ba đối số. Biểu mẫu hai đối số xây dựng một phạm vi ở dạng chuẩn (bao gồm giới hạn dưới, loại trừ giới hạn trên), trong khi biểu mẫu ba đối số xây dựng một phạm vi có giới hạn của biểu mẫu được chỉ định bởi đối số thứ ba. Đối số thứ ba phải là một trong các chuỗi “_______457”, “

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))
58”, “
INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))
59” hoặc “
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
70”. Ví dụ

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))
4

Mỗi loại phạm vi cũng có một hàm tạo đa phạm vi có cùng tên với loại đa phạm vi. Hàm xây dựng không nhận hoặc nhiều đối số là tất cả các phạm vi của loại thích hợp. Ví dụ

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))
5

8. 17. 7. Các loại phạm vi rời rạc

Phạm vi rời rạc là phạm vi có loại phần tử có "bước" được xác định rõ, chẳng hạn như

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
6 hoặc
SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
31. Trong các loại này, hai phần tử có thể được coi là liền kề, khi không có giá trị hợp lệ nào giữa chúng. Điều này trái ngược với các phạm vi liên tục, trong đó luôn luôn (hoặc hầu như luôn luôn) có thể xác định các giá trị phần tử khác giữa hai giá trị đã cho. Ví dụ: phạm vi trên loại
November, 2008   3
December, 2008   1
32 là liên tục, cũng như phạm vi trên
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
2. (Mặc dù
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
2 có độ chính xác hạn chế và do đó về mặt lý thuyết có thể được coi là rời rạc, tốt hơn là coi nó là liên tục vì kích thước bước thường không được quan tâm. )

Một cách khác để suy nghĩ về một loại phạm vi rời rạc là có một ý tưởng rõ ràng về giá trị “tiếp theo” hoặc “trước đó” cho mỗi giá trị phần tử. Biết được điều đó, có thể chuyển đổi giữa các biểu diễn bao gồm và loại trừ các giới hạn của một phạm vi, bằng cách chọn giá trị phần tử tiếp theo hoặc trước đó thay vì giá trị đã cho ban đầu. Ví dụ: trong một phạm vi số nguyên, loại

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
76 và
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
77 biểu thị cùng một bộ giá trị;

Loại phạm vi riêng biệt phải có chức năng chuẩn hóa nhận biết kích thước bước mong muốn cho loại phần tử. Chức năng chuẩn hóa được giao nhiệm vụ chuyển đổi các giá trị tương đương của loại phạm vi để có các biểu diễn giống hệt nhau, đặc biệt là các giới hạn bao gồm hoặc loại trừ một cách nhất quán. Nếu chức năng chuẩn hóa không được chỉ định, thì các phạm vi có định dạng khác nhau sẽ luôn được coi là không bằng nhau, mặc dù chúng có thể đại diện cho cùng một tập hợp các giá trị trong thực tế

Các loại phạm vi tích hợp sẵn

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
5,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
8 và
SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch
30 đều sử dụng dạng chính tắc bao gồm giới hạn dưới và loại trừ giới hạn trên; . Tuy nhiên, các loại phạm vi do người dùng xác định có thể sử dụng các quy ước khác

8. 17. 8. Xác định các loại phạm vi mới

Người dùng có thể xác định loại phạm vi của riêng họ. Lý do phổ biến nhất để làm điều này là sử dụng phạm vi trên các loại phụ không được cung cấp trong số các loại phạm vi tích hợp. Ví dụ: để xác định một loại phạm vi mới của loại phụ

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
12

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
7

Bởi vì

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
12 không có "bước" có ý nghĩa, nên chúng tôi không xác định chức năng chuẩn hóa trong ví dụ này

Khi bạn xác định phạm vi của riêng mình, bạn sẽ tự động nhận được loại đa phạm vi tương ứng

Xác định loại phạm vi của riêng bạn cũng cho phép bạn chỉ định một lớp toán tử cây B kiểu con khác hoặc đối chiếu để sử dụng, để thay đổi thứ tự sắp xếp xác định giá trị nào rơi vào một phạm vi nhất định

Nếu loại phụ được coi là có các giá trị rời rạc thay vì liên tục, thì lệnh

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
14 sẽ chỉ định hàm
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
15. Hàm chuẩn hóa lấy một giá trị phạm vi đầu vào và phải trả về một giá trị phạm vi tương đương có thể có các giới hạn và định dạng khác nhau. Đầu ra chuẩn cho hai phạm vi đại diện cho cùng một tập hợp giá trị, ví dụ: phạm vi số nguyên
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
16 và
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
17, phải giống hệt nhau. Việc bạn chọn đại diện nào là đại diện chính tắc không quan trọng, miễn là hai giá trị tương đương với các định dạng khác nhau luôn được ánh xạ tới cùng một giá trị với cùng định dạng. Ngoài việc điều chỉnh định dạng giới hạn bao gồm/loại trừ, chức năng chuẩn hóa có thể làm tròn các giá trị biên, trong trường hợp kích thước bước mong muốn lớn hơn kích thước mà kiểu con có khả năng lưu trữ. Chẳng hạn, một loại phạm vi trên
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
2 có thể được xác định để có kích thước bước là một giờ, trong trường hợp đó, chức năng chuẩn hóa sẽ cần làm tròn các giới hạn không phải là bội số của một giờ hoặc thay vào đó có thể gây ra lỗi

Ngoài ra, bất kỳ loại phạm vi nào được sử dụng với chỉ mục GiST hoặc SP-GiST phải xác định sự khác biệt của loại phụ hoặc hàm

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
19. (Chỉ mục sẽ vẫn hoạt động mà không có
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
19, nhưng nó có thể kém hiệu quả hơn nhiều so với khi cung cấp chức năng chênh lệch. ) Hàm chênh lệch kiểu con nhận hai giá trị đầu vào của kiểu con và trả về hiệu của chúng (i. e. ,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
11 trừ đi
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
12) được biểu diễn dưới dạng giá trị
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
12. Trong ví dụ của chúng tôi ở trên, hàm
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
14 làm cơ sở cho toán tử trừ
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
12 thông thường có thể được sử dụng; . Một số suy nghĩ sáng tạo về cách thể hiện sự khác biệt dưới dạng số cũng có thể cần thiết. Trong phạm vi lớn nhất có thể, hàm
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
19 phải phù hợp với thứ tự sắp xếp được ngụ ý bởi lớp toán tử đã chọn và đối chiếu;

Một ví dụ đơn giản hơn về hàm

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
19 là

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
1

Xem TẠO LOẠI để biết thêm thông tin về cách tạo các loại phạm vi

Các chỉ mục GiST và SP-GiST có thể được tạo cho các cột trong bảng thuộc các loại phạm vi. Các chỉ mục GiST cũng có thể được tạo cho các cột trong bảng thuộc nhiều loại. Chẳng hạn, để tạo chỉ mục GiST

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
1

Chỉ mục GiST hoặc SP-GiST trên các phạm vi có thể tăng tốc các truy vấn liên quan đến các toán tử phạm vi này.

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
18,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
19,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
20,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
21,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
22,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
23,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
24,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
25 và
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
26. Chỉ mục GiST trên nhiều phạm vi có thể tăng tốc các truy vấn liên quan đến cùng một nhóm toán tử đa phạm vi. Chỉ mục GiST trên các phạm vi và chỉ mục GiST trên nhiều phạm vi cũng có thể tăng tốc các truy vấn liên quan đến các toán tử phạm vi loại chéo này thành các toán tử đa phạm vi và đa phạm vi đối với phạm vi tương ứng.
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
19,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
20,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
21,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
22,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
23,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
24,
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
25 và
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
26. Xem Bảng 9. 54 để biết thêm thông tin

Ngoài ra, có thể tạo chỉ mục cây B và chỉ mục băm cho các cột trong bảng thuộc loại phạm vi. Đối với các loại chỉ mục này, về cơ bản, hoạt động phạm vi hữu ích duy nhất là đẳng thức. Có một thứ tự sắp xếp cây B được xác định cho các giá trị phạm vi, với các toán tử

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
05 và
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
06 tương ứng, nhưng thứ tự này khá tùy ý và thường không hữu ích trong thế giới thực. Hỗ trợ băm và cây B của các loại phạm vi chủ yếu nhằm cho phép sắp xếp và băm nội bộ trong các truy vấn, thay vì tạo các chỉ mục thực tế

8. 17. 10. Ràng buộc trên phạm vi

Mặc dù

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
07 là một ràng buộc tự nhiên đối với các giá trị vô hướng, nhưng nó thường không phù hợp với các loại phạm vi. Thay vào đó, một ràng buộc loại trừ thường thích hợp hơn (xem CREATE TABLE. HẠN CHẾ. LOẠI TRỪ). Các ràng buộc loại trừ cho phép đặc tả các ràng buộc chẳng hạn như “không chồng lấp” trên một loại phạm vi. Ví dụ

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
2

Ràng buộc đó sẽ ngăn mọi giá trị trùng lặp tồn tại trong bảng cùng một lúc

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
0

Bạn có thể sử dụng tiện ích mở rộng

(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
08 để xác định các ràng buộc loại trừ đối với các loại dữ liệu vô hướng đơn giản, sau đó có thể kết hợp với các loại trừ phạm vi để có tính linh hoạt tối đa. Ví dụ: sau khi cài đặt
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty
08, ràng buộc sau sẽ chỉ loại bỏ các phạm vi chồng chéo nếu số phòng họp bằng nhau