Двойная двоеточие (: :) нотация в SQL - PullRequest
62 голосов
/ 22 апреля 2011

Подобрали чей-то код, и это часть предложения where, кто-нибудь знает, что означает двойное двоеточие?

b.date_completed >  a.dc::date + INTERVAL '1 DAY 7:20:00'

Ответы [ 4 ]

56 голосов
/ 22 апреля 2011

Это зависит от RDBMS, но, если я правильно понял, это PostgreSQL, и в этом случае :: преобразует a.dc в тип даты date.

В других вариантах ...

В MS SQL Server 2000:

Для встроенных пользовательских функций, возвращающих таблицу, имя функции должно указываться с двоеточием в начале (: :) дляотличить его от пользовательских функций, которые не являются встроенными.Он также должен быть указан как однокомпонентное имя без базы данных или квалификации владельца.Например: SELECT * FROM :: fn_helpcollations () b .. Для встроенных пользовательских функций, которые возвращают скалярное значение, имя функции должно быть указано как однокомпонентное имя (не указывайте базу данных или владельца).Не указывайте начальное двойное двоеточие (::).

В MS SQL Server 2005:

Двойные двоеточия больше не требуются для пользовательских функций, возвращающих таблицу.

Однако ...

В SQL Server 2005 требуются двойные двоеточия при предоставлении разрешений для схем, сертификатов, конечных точек и нескольких других защищаемых объектов.

А также ...

При использовании пользовательских типов статические методы этого типа должны вызываться с использованием синтаксиса с двумя двоеточиями.

Источники: BOL и Блог Калена Делани

19 голосов
/ 22 апреля 2011

В данном случае это приведение к типу даты. :: это приведение типа, которое также может быть представлено как CAST (выражение типа AS).

2 голосов
/ 16 августа 2018

Это операция CAST (приведена к типу даты).

Пример:

SELECT now()::timestamp(0);

Эквивалентно:

SELECT 
    CAST (now() AS timestamp(0));

Они оба приводят к приведению now() к timestamp в следующем формате: YYYY-MM-DD HH:MM:SS

1 голос
/ 22 апреля 2011

Это, вероятно, приведение, преобразующее a.dc в тип date.

IBM Informix Dynamic Server (IDS) будет работать таким образом, но нотация INTERVAL в конце недопустима для IDS, поэтому предположительно это фактически другая СУБД (вероятно, PostgreSQL ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...