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