Doppelpunkt (: :) Notation in SQL

Antworten:

65

Es variiert je nach RDBMS, aber wenn ich richtig denke, ist das PostgreSQL. In diesem Fall wird das in einen Datumstyp von ::konvertiert .a.dcdate

In anderen Geschmacksrichtungen ...

In MS SQL Server 2000:

Bei integrierten benutzerdefinierten Funktionen, die eine Tabelle zurückgeben, muss der Funktionsname mit einem führenden Doppelpunkt (: :) angegeben werden, um ihn von benutzerdefinierten Funktionen zu unterscheiden, die nicht integriert sind. Es muss auch als einteiliger Name ohne Datenbank- oder Eigentümerqualifikation angegeben werden. Beispiel: SELECT * FROM :: fn_helpcollations () b .. Bei integrierten benutzerdefinierten Funktionen, die einen Skalarwert zurückgeben, muss der Funktionsname als einteiliger Name angegeben werden (keine Datenbank oder Eigentümer angeben). Geben Sie keinen führenden Doppelpunkt (: :) an.

In MS SQL Server 2005:

Für UDFs, die eine Tabelle zurückgeben, sind keine Doppelpunkte mehr erforderlich.

Jedoch...

In SQL Server 2005 sind Doppelpunkte erforderlich, wenn Berechtigungen für Schemas, Zertifikate, Endpunkte und einige andere sichere Elemente erteilt werden sollen.

Ebenso gut wie...

Bei Verwendung von benutzerdefinierten Typen müssen statische Methoden des Typs mithilfe der Doppelpunkt-Syntax aufgerufen werden.

Quellen: BOL und Kalen Delaneys Blog

Michael Fredrickson
quelle
Ich bin auf diese Syntax gestoßen, die mit einer UDF in der SQL 2008 MCTS-Übungsprüfung verwendet wurde. Sie wird nirgendwo im Buch erwähnt! Vielen Dank für die Erklärung
Sophia
25

In diesem Fall handelt es sich um eine Umwandlung in einen Datumstyp. :: ist eine Typumwandlung, die auch als CAST (Ausdruck AS-Typ) dargestellt werden kann.

Michael Dean
quelle
Wenn Sie das sicher wissen, wissen Sie vielleicht, wofür RDBMS dieses Skript ist?
Andriy M
Sieht für mich nach PostgreSQL aus. Kennen Sie Alternativen, die dieselbe Syntax haben würden?
Michael Dean
Ich kenne einige RDBMS, die die Doppelpunktnotation unterstützen, und ich kenne einige andere, die diese INTERVALUnterstützung bieten . Dies ist der erste Code, den ich je gesehen habe und der beides kombiniert. Ich war nur neugierig. Danke für die Antwort.
Andriy M
12

Es ist eine CASTOperation (in einen Datumstyp umgewandelt).

Beispiel:

SELECT now()::timestamp(0);

Ist äquivalent zu:

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

Beide Ergebnis in Gießen now()auf timestampin folgendem Format:YYYY-MM-DD HH:MM:SS

techkuz
quelle
Ein weiteres einfaches Beispiel könnte sein : select 1.2::integer, das Ergebnis als ausgibt 1.
Themenfeld
0

Es ist wahrscheinlich eine Besetzung, die a.dcin Typ umgewandelt wird date.

IBM Informix Dynamic Server (IDS) würde so funktionieren - aber die INTERVAL-Notation am Ende ist für IDS nicht gültig. Vermutlich handelt es sich also tatsächlich um ein anderes DBMS (wahrscheinlich PostgreSQL ).

Jonathan Leffler
quelle