Podniosłem czyjś kod i jest to część klauzuli Where, czy ktoś wie, co oznacza podwójny dwukropek?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
Podniosłem czyjś kod i jest to część klauzuli Where, czy ktoś wie, co oznacza podwójny dwukropek?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
Odpowiedzi:
Różni się w zależności od RDBMS, ale jeśli zgaduję, jest to PostgreSQL, w którym to przypadku ::
konwertuje a.dc
się na typ daty date
.
W innych smakach ...
W MS SQL Server 2000:
W przypadku wbudowanych funkcji zdefiniowanych przez użytkownika, które zwracają tabelę, nazwa funkcji musi być określona z początkowym podwójnym dwukropkiem (: :), aby odróżnić ją od funkcji zdefiniowanych przez użytkownika, które nie są wbudowane. Musi być również określona jako jednoczęściowa nazwa bez bazy danych ani kwalifikacji właściciela. Na przykład: SELECT * FROM :: fn_helpcollations () b .. W przypadku wbudowanych funkcji zdefiniowanych przez użytkownika, które zwracają wartość skalarną, nazwa funkcji musi być określona jako jednoczęściowa (nie należy określać bazy danych ani właściciela). Nie określaj początkowego podwójnego dwukropka (: :).
W MS SQL Server 2005:
Dwukropki nie są już wymagane w przypadku funkcji UDF, które zwracają tabelę.
Jednak...
Dwukropki są wymagane w programie SQL Server 2005 podczas udzielania uprawnień do schematów, certyfikatów, punktów końcowych i kilku innych elementów zabezpieczających.
Jak również...
W przypadku korzystania z typów zdefiniowanych przez użytkownika statyczne metody tego typu muszą być wywoływane przy użyciu składni z podwójnym dwukropkiem.
Źródła: Blog BOL i Kalen Delaney
W tym przypadku jest to rzut do typu daty. :: to rzutowanie typu, które może być również reprezentowane jako CAST (wyrażenie jako typ).
INTERVAL
obsługę. To pierwszy fragment kodu, jaki kiedykolwiek widziałem, który łączy oba. Byłem tylko ciekawy. Dziękuję za odpowiedź.
To CAST
operacja (rzutowanie na typ daty).
Przykład:
SELECT now()::timestamp(0);
Jest równa:
SELECT
CAST (now() AS timestamp(0));
Oba kończą now()
się rzutowaniem do timestamp
w następującym formacie:YYYY-MM-DD HH:MM:SS
select 1.2::integer
co zwróci wynik jako 1
.
To prawdopodobnie obsada, konwertowanie a.dc
na typ date
.
IBM Informix Dynamic Server (IDS) działałby w ten sposób - ale notacja INTERVAL na końcu nie jest poprawna dla IDS, więc przypuszczalnie jest to w rzeczywistości inny DBMS (prawdopodobnie PostgreSQL ).