Подвійна двокрапка (: :) позначення в SQL


85

Вибрали чийсь код, і це частина пропозиції where, хтось знає, що означає подвійна двокрапка?

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


Відповіді:


64

Він варіюється залежно від СУБД, але якщо я гадаю правильно, це PostgreSQL, в цьому випадку ::перетворюється a.dcна тип дати date.

В інших ароматах ...

У MS SQL Server 2000:

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

У MS SQL Server 2005:

Двокрапки більше не потрібні для UDF, які повертають таблицю.

Однак ...

Подвійні двокрапки потрібні в SQL Server 2005 під час надання дозволів на схеми, сертифікати, кінцеві точки та деякі інші захисні засоби.

Так само, як...

При використанні визначених користувачем типів, статичні методи типу повинні викликатися із використанням синтаксису подвійного двокрапки.

Джерела: BOL та блог Калена Делані


Я натрапив на цей синтаксис, що використовується з UDF, на іспиті з практичної роботи з MCTS SQL 2008, він ніде не згадується в книзі! Дякую за пояснення
Софія

25

У цьому випадку це приклад для типу дати. :: є типом, який також може бути представлений як CAST (вираз AS type).


Якщо ви точно це знаєте, можливо, ви знаєте, для чого призначена RDBMS для цього сценарію?
Андрій М

Мені здається PostgreSQL. Чи знаєте ви якісь альтернативи, які мали б однаковий синтаксис?
Michael Dean

Я знаю деякі СУБД, які підтримують позначення подвійною двокрапкою, і знаю деякі інші, що мають INTERVALпідтримку. Це перший фрагмент коду, який я коли-небудь бачив, який поєднує в собі обидва. Мені було просто цікаво. Дякую за відповідь.
Андрій М

11

Це CASTоперація (прив’язка до типу дати).

Приклад:

SELECT now()::timestamp(0);

Це еквівалентно:

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

Вони обидва результату в кастингу , now()щоб timestampв наступному форматі:YYYY-MM-DD HH:MM:SS


Ще одним простим прикладом може бути:, select 1.2::integerякий виведе результат як 1.
тематичне поле

0

Ймовірно, це акторський склад, що перетворюється a.dcна тип date.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.