SQL'de çift iki nokta (: :) gösterimi


90

Birinin kodunu aldınız ve bu bir where cümlesinin bir parçası, çift iki nokta üst üste işaretinin ne anlama geldiğini bilen var mı?

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


Yanıtlar:


67

RDBMS'ye göre değişir, ancak doğru tahmin edersem, bu PostgreSQL'dir, bu durumda bir tarih türüne ::dönüşür .a.dcdate

Diğer tatlarda ...

MS SQL Server 2000'de:

Bir tablo döndüren yerleşik kullanıcı tanımlı işlevler için işlev adı, onu yerleşik olmayan kullanıcı tanımlı işlevlerden ayırmak için önde çift iki nokta üst üste (: :) ile belirtilmelidir. Ayrıca, veritabanı veya sahip nitelikleri olmadan tek parçalı bir ad olarak da belirtilmelidir. Örneğin: SELECT * FROM :: fn_helpcollations () b .. Skaler bir değer döndüren yerleşik kullanıcı tanımlı işlevler için, işlev adı tek parçalı bir ad olarak belirtilmelidir (veritabanı veya sahibi belirtmeyin). Başta çift iki nokta (: :) belirtmeyin.

MS SQL Server 2005'te:

Bir tablo döndüren UDF'ler için artık çift iki nokta üst üste gerekli değildir.

Ancak...

SQL Server 2005'te şemalar, sertifikalar, uç noktalar ve diğer birkaç güvenliğe ilişkin izinler verilirken çift iki nokta üst üste kullanılması gerekir.

Hem de...

Kullanıcı Tanımlı Türler kullanılırken, türün statik yöntemleri çift kolon sözdizimi kullanılarak çağrılmalıdır.

Kaynaklar: BOL ve Kalen Delaney'in Blogu


SQL 2008 MCTS uygulama sınavında bir UDF ile kullanılan bu sözdizimine rastladım, kitabın hiçbir yerinde bahsedilmiyor! Açıkladığınız için teşekkürler
Sophia

27

Bu durumda, bir tarih türüne göre atılır. :: CAST (tip AS ifadesi) olarak da temsil edilebilen bir tür atamadır.


Bundan eminseniz, o zaman belki bu komut dosyasının ne için RDBMS olduğunu biliyorsunuzdur?
Andriy M

Bana PostgreSQL gibi görünüyor. Aynı sözdizimine sahip herhangi bir alternatif biliyor musunuz?
Michael Dean

Çift iki nokta işaretini destekleyen bazı RDBMS'leri biliyorum ve INTERVALdestek özelliğine sahip bazılarını da biliyorum . Bu, her ikisini de birleştiren gördüğüm ilk kod parçası. Sadece merak ettim. Yanıt için teşekkürler.
Andriy M

14

Bu bir CASTişlemdir (bir tarih türüne atılır).

Misal:

SELECT now()::timestamp(0);

Eşittir:

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

Onlar döküm hem sonuç now()için timestampaşağıdaki biçimde:YYYY-MM-DD HH:MM:SS


Başka bir basit örnek şöyle olabilir:, select 1.2::integersonuç olarak 1.
themefield

0

Muhtemelen a.dctipe dönüşen bir kadro date.

IBM Informix Dynamic Server (IDS) bu şekilde çalışacaktır - ancak sondaki INTERVAL gösterimi IDS için geçerli değildir, bu nedenle muhtemelen bu aslında başka bir DBMS'dir (muhtemelen PostgreSQL ).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.