Haben Sie den Code von jemandem aufgegriffen und dies ist Teil einer where-Klausel. Weiß jemand, was der Doppelpunkt anzeigt?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
Haben Sie den Code von jemandem aufgegriffen und dies ist Teil einer where-Klausel. Weiß jemand, was der Doppelpunkt anzeigt?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
Antworten:
Es variiert je nach RDBMS, aber wenn ich richtig denke, ist das PostgreSQL. In diesem Fall wird das in einen Datumstyp von ::
konvertiert .a.dc
date
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
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.
INTERVAL
Unterstü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.
Es ist eine CAST
Operation (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 timestamp
in folgendem Format:YYYY-MM-DD HH:MM:SS
select 1.2::integer
, das Ergebnis als ausgibt 1
.
Es ist wahrscheinlich eine Besetzung, die a.dc
in 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 ).