Подтвердить что ты не робот

Двойной двоеточие (::) нотация в SQL

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

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

Ответ 1

Он зависит от СУБД, но если я правильно понимаю, что PostgreSQL, в этом случае :: преобразует a.dc в тип даты date.

В других ароматах...

В MS SQL Server 2000:

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

В MS SQL Server 2005:

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

Однако...

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

Также как...

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

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

Ответ 2

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

Ответ 3

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

Пример:

SELECT now()::timestamp(0);

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

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

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

Ответ 4

Вероятно, это отличное преобразование a.dc для ввода date.

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