Подобрали чей-то код, и это часть предложения where, кто-нибудь знает, что означает двойное двоеточие?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
Это зависит от RDBMS, но, если я правильно понял, это PostgreSQL, и в этом случае :: преобразует a.dc в тип даты date.
::
a.dc
date
В других вариантах ...
В MS SQL Server 2000:
Для встроенных пользовательских функций, возвращающих таблицу, имя функции должно указываться с двоеточием в начале (: :) дляотличить его от пользовательских функций, которые не являются встроенными.Он также должен быть указан как однокомпонентное имя без базы данных или квалификации владельца.Например: SELECT * FROM :: fn_helpcollations () b .. Для встроенных пользовательских функций, которые возвращают скалярное значение, имя функции должно быть указано как однокомпонентное имя (не указывайте базу данных или владельца).Не указывайте начальное двойное двоеточие (::).
В MS SQL Server 2005:
Двойные двоеточия больше не требуются для пользовательских функций, возвращающих таблицу.
Однако ...
В SQL Server 2005 требуются двойные двоеточия при предоставлении разрешений для схем, сертификатов, конечных точек и нескольких других защищаемых объектов.
А также ...
При использовании пользовательских типов статические методы этого типа должны вызываться с использованием синтаксиса с двумя двоеточиями.
Источники: BOL и Блог Калена Делани
В данном случае это приведение к типу даты. :: это приведение типа, которое также может быть представлено как CAST (выражение типа AS).
Это операция CAST (приведена к типу даты).
CAST
Пример:
SELECT now()::timestamp(0);
Эквивалентно:
SELECT CAST (now() AS timestamp(0));
Они оба приводят к приведению now() к timestamp в следующем формате: YYYY-MM-DD HH:MM:SS
now()
timestamp
YYYY-MM-DD HH:MM:SS
Это, вероятно, приведение, преобразующее a.dc в тип date.
IBM Informix Dynamic Server (IDS) будет работать таким образом, но нотация INTERVAL в конце недопустима для IDS, поэтому предположительно это фактически другая СУБД (вероятно, PostgreSQL ).