Đã nhặt được mã của ai đó và đây là một phần của mệnh đề where, có ai biết dấu hai chấm cho biết gì không?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
Đã nhặt được mã của ai đó và đây là một phần của mệnh đề where, có ai biết dấu hai chấm cho biết gì không?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
Câu trả lời:
Nó thay đổi dựa trên RDBMS, nhưng nếu tôi đoán đúng, đó là PostgreSQL, trong trường hợp đó, nó ::
chuyển đổi a.dc
thành kiểu ngày tháng date
.
Trong các hương vị khác ...
Trong MS SQL Server 2000:
Đối với các hàm do người dùng định nghĩa dựng sẵn trả về một bảng, tên hàm phải được chỉ định bằng dấu hai chấm kép ở đầu (: :) để phân biệt với các hàm do người dùng định nghĩa không được tích hợp sẵn. Nó cũng phải được chỉ định là tên một phần không có cơ sở dữ liệu hoặc trình độ chủ sở hữu. Ví dụ: SELECT * FROM :: fn_helpcollations () b .. Đối với các hàm cài sẵn do người dùng định nghĩa trả về giá trị vô hướng, tên hàm phải được chỉ định là tên một phần (không chỉ định cơ sở dữ liệu hoặc chủ sở hữu). Không chỉ định dấu hai chấm ở đầu (: :).
Trong MS SQL Server 2005:
Dấu hai chấm không còn bắt buộc đối với các UDF trả về một bảng.
Tuy nhiên...
Dấu hai chấm là bắt buộc trong SQL Server 2005 khi cấp quyền trên lược đồ, chứng chỉ, điểm cuối và một số bảo mật khác.
Cũng như...
Khi sử dụng Kiểu do người dùng xác định, các phương thức tĩnh của kiểu phải được gọi bằng cú pháp dấu hai chấm.
Nguồn: BOL và Kalen Delaney's Blog
Trong trường hợp này, nó là một kiểu truyền ngày tháng. :: là một kiểu ép kiểu cũng có thể được biểu diễn dưới dạng CAST (kiểu biểu thức AS).
INTERVAL
hỗ trợ. Đây là đoạn mã đầu tiên tôi từng thấy kết hợp cả hai. Tôi chỉ là tò mò thôi. Cảm ơn vi đa trả lơi.
Nó là một CAST
hoạt động (ép kiểu ngày tháng).
Thí dụ:
SELECT now()::timestamp(0);
Tương đương với:
SELECT
CAST (now() AS timestamp(0));
Cả hai đều dẫn đến việc truyền now()
sang timestamp
ở định dạng sau:YYYY-MM-DD HH:MM:SS
select 1.2::integer
, sẽ xuất ra kết quả là 1
.
Nó có lẽ là một diễn viên, chuyển đổi a.dc
sang loại date
.
Máy chủ động Informix của IBM (IDS) sẽ hoạt động theo cách đó - nhưng ký hiệu INTERVAL ở cuối không hợp lệ cho IDS, vì vậy có lẽ đây trên thực tế là một DBMS khác (có thể là PostgreSQL ).