Kurs
Belirli bir tarihten daha büyük tarihleri nasıl sorgulayacağınızı anlamak, etkili veritabanı yönetimi ve analiz için kritik öneme sahiptir. Bu eğitim, SQL Server, PostgreSQL ve Oracle dahil olmak üzere farklı SQL veritabanı sistemlerinde SQL ile tarih karşılaştırmaları yapmaya yönelik kapsamlı bir rehber sunar. İster geçmiş veri analizi, raporlama, ister kayıtları filtreleme ile uğraşıyor olun, bu tekniğe hakim olmak SQL sorgulama becerilerinizi geliştirecektir.
Bu rehberin sonunda şunları yapabileceksiniz:
- Anlamak: SQL Server, PostgreSQL ve Oracle dahil farklı SQL veritabanlarındaki tarih biçimleri ve işlevlerinin inceliklerini.
- Uygulamak: Gerçek dünyadan senaryolara yönelik pratik örnekleri.
Daha fazlasını öğrenmeye hazır bir veri analisti veya veri bilimciyseniz, veritabanlarından veri sorgulamaya aşina olmak için DataCamp'in SQL Fundamentals beceri yolunu öneririm. Veritabanı uzmanlığını genişletmek isteyenler için verimli veritabanları oluşturma konusunda içgörüler sunan Database Design kursuna göz atın.
SQL'de Tarih Karşılaştırmalarına Giriş
SQL'de tarih karşılaştırması, analiz sırasında veri uzmanlarının verileri filtrelemesine ve sıralamasına olanak tanıdığı için önemlidir. Bu yöntem, eğilim analizi gerektiren finansal raporlama veya stok yönetiminde özellikle kullanışlıdır.
SQL'in 'büyüktür' işleci (>), iki tarih değerini karşılaştırmak için tarihlerle birlikte kullanılır. Bir SQL sorgusunda tarihlerle birlikte 'büyüktür' işleci kullandığınızda, sorgu belirtilen tarihten sonraki tarihleri içeren kayıtları döndürür. Örneğin, aşağıdaki sorgu Orders tablosunda OrderDate değerinin 2023-01-01 tarihinden sonra olduğu satırları döndürecektir.
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';
Verileri filtrelemek için kullanılabilecek temel SQL işleçlerini kısaca gözden geçirerek başlayalım. Bu işleçler, aşağıdaki örnekleri denemeden önce inceleyebileceğiniz SQL Basics Cheat Sheet içeriğimizde de ele alınmaktadır.
Eşittir (=)
= işleci, SQL'de iki değerin eşit olup olmadığını karşılaştırmak için kullanılır. Aşağıda işlecin bir tarih değeriyle kullanıldığı bir örnek yer almaktadır. SQL sorgusu, Orders tablosunda OrderDate değerinin 2023-01-01 tarihine eşit olduğu satırları döndürecektir.
-- 1 Ocak 2023'te verilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE OrderDate = '2023-01-01';
Eşit değildir (!= veya <>)
!= veya <> işleci iki değeri karşılaştırır ve başvurulan değerlere eşit olmayanları döndürür. Örneğin bir tarih değeriyle kullanıldığında, != veya <> işleci başvurulan tarihle aynı olmayan satırları döndürür. İncelikleri öğrenmek için SQL NOT EQUAL Operatörü: Yeni Başlayanlar için Rehber yazımızı da okuyabilirsiniz.
-- 1 Ocak 2023'te verilmeyen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE OrderDate != '2023-01-01';
-- <> ile alternatif sözdizimi
SELECT *
FROM Orders
WHERE OrderDate <> '2023-01-01';
Küçüktür (<)
< işleci, SQL'de soldaki değerin sağdakinden küçük olup olmadığını kontrol etmek için kullanılır. Tarih değerleriyle bir SQL sorgusunda kullanıldığında sorgu, belirtilen tarihten daha erken olan tarihleri içeren kayıtları döndürür. Örneğin, aşağıdaki sorgu Orders tablosunda OrderDate değerinin 2023-01-01 tarihinden önce olduğu satırları döndürecektir.
-- 1 Ocak 2023'ten önce verilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE OrderDate < '2023-01-01';
Büyüktür veya eşittir (>=)
>= işleci, işlecin solundaki değerlerin sağdaki değerden büyük veya ona eşit olup olmadığını kontrol eder. İşleç SQL'de bir tarih değeri sorgulamak için kullanıldığında, yalnızca başvurulan değere eşit veya ondan büyük tarih değerlerinin olduğu kayıtları döndürür.
-- 1 Ocak 2023'te veya sonrasında verilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE OrderDate >= '2023-01-01';
Küçüktür veya eşittir (<=)
<= işleci, işlecin solundaki değerlerin sağdaki değerden küçük veya ona eşit olup olmadığını kontrol etmek için kullanılır. İşleç bir tarih değerini sorgulamak için kullanıldığında, yalnızca başvurulan değere eşit veya ondan küçük tarih değerlerinin olduğu kayıtları döndürür.
-- 1 Ocak 2023'te veya öncesinde verilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE OrderDate <= '2023-01-01';
SQL Server'da Tarih Karşılaştırması
SQL Server'da tarihleri şu işleçlerle karşılaştırabiliriz: <, <=, >, >= ve =. Ancak biz aşağıdakileri ele alacağız:
'Büyüktür' (>) işlecini kullanma
'Büyüktür' (>) işleci, SQL Server'da işlecin sağ tarafındaki tarihten daha geç olan tarihleri filtrelemek için kullanılır. Örneğin, aşağıdaki sorgu Orders tablosunu filtreler ve OrderDate 2023-01-01 sonrasında verilen siparişlerin kayıtlarını döndürür.
-- 1 Ocak 2023'ten sonra teslim edilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE DeliveryDate > '2023-01-01';
GETDATE() işlevini kullanma
SQL Server'daki GETDATE() işlevi, kullanıcının sisteminde kayıtlı geçerli tarihi döndürür. Bu nedenle, bu işlevi kullanarak verileri sorgulayabilir ve tarihi geçerli tarihten büyük olan satırları filtreleyebilirsiniz.
-- Geçerli tarih ve saatten sonra teslim edilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE DeliveryDate > GETDATE();
Tarih aralıkları için BETWEEN kullanma
SQL'deki BETWEEN işleci, verilen bir aralık arasındaki değerleri filtrelemek için kullanılır. SQL Server'da tarihlerle kullanıldığında, belirtilen tarih aralığındaki tarihleri içeren satırları filtreleyebilirsiniz. Sonuçlar, sorguda yazıldığı şekliyle başlangıç ve bitiş tarihlerini de kapsar.
-- 1 Ocak 2023 ile 31 Aralık 2023 arasında teslim edilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE DeliveryDate BETWEEN '2023-01-01' AND '2023-12-31';
Tarih aralıkları için CAST ve CONVERT kullanma
Hataları önlemek için CAST ve CONVERT işlevlerini de kullanabilirsiniz. Bu işlevler, tarih değerlerinin doğru şekilde yorumlanmasını ve biçimlendirilmesini sağlar.
-- Bir dizgeyi tarihe dönüştürme
SELECT CAST('2023-06-26' AS DATE) AS ConvertedDate;
-- Bir dizgeyi datetime'a dönüştürme
SELECT CAST('2023-06-26 14:30:00' AS DATETIME) AS ConvertedDateTime;
-- CONVERT kullanarak bir dizgeyi tarihe dönüştürme
SELECT CONVERT(DATE, '2023-06-26') AS ConvertedDate;
-- CONVERT kullanarak bir dizgeyi datetime'a dönüştürme
SELECT CONVERT(DATETIME, '2023-06-26 14:30:00') AS ConvertedDateTime;
PostgreSQL'de Tarih Karşılaştırması
PostgreSQL'de tarihleri karşılaştırmak için kullanılan bazı farklı ifadeler vardır. Aşağıda bazılarını ele alıyoruz.
'Büyüktür' (>) işlecini kullanma
SQL Server veritabanına benzer şekilde, PostgreSQL'deki > işleci, karşılaştırma tarihinden daha büyük olan tarihleri filtreler.
-- 1 Ocak 2023'ten sonra verilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';
EXTRACT işlevini kullanma
EXTRACT işlevi, PostgreSQL'de yıl, ay veya gün gibi tarih alanlarını almak için kullanılır. Aşağıdaki sorguda EXTRACT ifadesi, 2023 YILI için kayıtları filtreler.
-- 2023 yılında verilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE EXTRACT(YEAR FROM OrderDate) = 2023;
INTERVAL işlevini kullanma
INTERVAL işlevi, PostgreSQL'de bazı tarih hesaplamaları yapmak için kullanılır. INTERVAL, bir tarihe belirli zaman miktarlarını eklemenizi veya çıkarmanızı sağlar.
-- Son 30 günde verilen tüm siparişleri seçin
SELECT *
FROM Orders
-- Geçerli tarihten itibaren son 30 gün içinde verilen siparişleri filtreleyin
WHERE OrderDate > NOW() - INTERVAL '30 days';
DATE_PART işlevini kullanma
DATE_PART işlevi, tarih değerinden bir alt alan çıkarmaya olanak tanır. Bu alt alan tarih veya saat olabilir. Aşağıdaki sorgu, Mart ayında verilen siparişleri döndürür ve üçüncü ay için çift duyarlıklı 3 değerini verir.
-- Mart ayında verilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE DATE_PART('month', OrderDate) = 3;
TO_DATE işlevini kullanma
PostgreSQL'deki TO_DATE işlevi, verilen biçime göre bir dizgeyi tarih değerine dönüştürür. Aşağıdaki sorguda tarih değeri bir dizge olarak verilmiştir. Bu nedenle, YYYY-MM-DD biçimindeki tarihe dönüştürülür.
-- Dize tarih kullanarak 1 Ocak 2023'te verilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE OrderDate = TO_DATE('2023-01-01', 'YYYY-MM-DD');
Tarih aralıkları için BETWEEN kullanma
SQL Server'da olduğu gibi, PostgreSQL'de de BETWEEN ifadesi belirli bir aralık içindeki verileri filtreler. Tarih içeren değerler için BETWEEN işlevi, belirtilen tarihler arasındaki satırları filtreler ve döndürür. Bu tarihler sonuçlara dahildir.
-- 1 Ocak 2023 ile 31 Aralık 2023 arasında verilen tüm siparişleri seçin
SELECT *
FROM Orders
WHERE OrderDate BETWEEN '2023-01-01' AND '2023-12-31';
Oracle'da Tarih Karşılaştırması
'Büyüktür' (>) işlecini kullanma
> işleci, karşılaştırma tarihinden daha geç olan tarihleri filtreler.
-- Bitiş tarihi gelecekte olan tüm etkin kullanıcıları seçin
SELECT *
FROM Users
-- Durumu 'Active' olan kullanıcıları filtreleyin
WHERE Status = 'Active'
-- Bitiş tarihinin gelecekte olduğundan emin olun
AND EndDate > SYSDATE;
NULL tarihler ve karmaşık koşulları ele alma
Oracle veritabanında tarihleri karşılaştırırken, boş tarih gibi karmaşık senaryoları belirtmek önemlidir. Bu durumda, tarihi olmayan kayıtları filtrelemek için IS NULL ifadesini kullanırız.
-- Bitiş tarihi gelecekte olan veya bitiş tarihi olmayan (NULL) tüm etkin kullanıcıları seçin
SELECT *
FROM Users
-- Durumu 'Active' olan kullanıcıları filtreleyin
WHERE Status = 'Active'
-- Bitiş tarihinin gelecekte olduğundan veya NULL (bitiş tarihi yok) olduğundan emin olun
AND (EndDate > SYSDATE OR EndDate IS NULL);
Tarih aralıkları için BETWEEN kullanma
BETWEEN ifadesi, Oracle'da da belirli bir aralık içindeki verileri filtrelemek için kullanılır. Tarih içeren değerler için BETWEEN işlevi, belirtilen tarihler arasındaki kayıtları filtreler ve döndürür. Bu tarihler sonuçlara dahildir.
-- Bitiş tarihi geçerli tarih ile belirli bir gelecek tarih (ör. yıl sonu) arasında olan tüm etkin kullanıcıları seçin
SELECT *
FROM Users
-- Durumu 'Active' olan kullanıcıları filtreleyin
WHERE Status = 'Active'
-- Bitiş tarihinin geçerli tarih ile belirli bir gelecek tarih (ör. 31 Aralık 2023) arasında olduğundan emin olun
AND EndDate BETWEEN SYSDATE AND DATE '2023-12-31';
Yaygın Tuzaklar ve En İyi Uygulamalar
SQL'de tarihler ve 'büyüktür' işleciyle ilgili sorunlarla karşılaştım. İşte sık yapılan bazı hatalar ve bunlardan nasıl kaçınılacağına dair ipuçları.
Tutarsız tarih biçimleri
Sorgularınızda tutarsız tarih biçimleri kullanmak hatalara yol açar. YYYY-MM-DD ve MM-DD-YYYY gibi tarih biçimlerini karıştırırsanız istediğiniz sonuçları alamayabilirsiniz.
Bu sorunlardan kaçınmak için her zaman standart tarih biçimi kullanın. PostgreSQL veya Oracle veritabanlarında TO_DATE kullanarak tarihi tercih ettiğiniz biçime veya yerel kurallara göre dönüştürebilirsiniz. SQL Server için CAST ve CONVERT işlevlerini kullanabilirsiniz.
-- Bir dizgeyi tarihe dönüştürme
SELECT CAST('2023-06-26' AS DATE) AS ConvertedDate;
-- Bir dizgeyi datetime'a dönüştürme
SELECT CAST('2023-06-26 14:30:00' AS DATETIME) AS ConvertedDateTime;
-- CONVERT kullanarak bir dizgeyi tarihe dönüştürme
SELECT CONVERT(DATE, '2023-06-26') AS ConvertedDate;
-- CONVERT kullanarak bir dizgeyi datetime'a dönüştürme
SELECT CONVERT(DATETIME, '2023-06-26 14:30:00') AS ConvertedDateTime;
Saat dilimi yönetimi
Birden fazla saat dilimine yayılan verilerle çalışırken yanlış sonuçlar elde edebilirsiniz. Ayrıca, tarih dönüştürme sırasında saat dilimi farklarını hesaba katmamak hatalara neden olabilir.
Bu nedenle, tarihlerinizi UTC'de (Eşgüdümlü Evrensel Zaman) saklamanızı ve dönüştürme için yerleşik saat dilimi işlevlerini kullanmanızı öneririm.
-- Tarihleri UTC'de saklayın ve yerel saat dilimine dönüştürün
SELECT *
FROM Orders
-- OrderDate'in UTC'deki değerinin 'America/New_York' saat dilimindeki geçerli tarihten büyük olduğu siparişleri filtreleyin
WHERE OrderDate AT TIME ZONE 'UTC' > SYSDATE AT TIME ZONE 'America/New_York';
-- Doğru karşılaştırma için saat dilimi işlevlerini kullanın
SELECT *
FROM Users
-- EndDate'in UTC'deki değerinin UTC'deki geçerli tarihten büyük olduğu kullanıcıları filtreleyin
WHERE EndDate AT TIME ZONE 'UTC' > SYSDATE AT TIME ZONE 'UTC';
Tarihlerle yaygın hatalardan kaçınma
Tarihlerle çalışırken, analiziniz için yalnızca ihtiyaç duyduğunuz değerleri çekerek hatalardan kaçınmak önemlidir. Örneğin, analizinizle ilgisi yoksa bir tarih değerindeki saat bileşenini dışarıda bırakabilirsiniz. Özellikle tarih değerlerinin bu hatayı içerebileceği durumlarda, NULL değerlerini açıkça ele alın.
Okunabilir ve sürdürülebilir sorgular yazma
Kendinizi okunması ve farklı ifadeleri takip etmesi zor olan karmaşık ve iç içe sorgular yazarken bulabilirsiniz. Benzer şekilde, kodunuza yorum eklemezseniz ne yaptığını açıklamak zorlaşır.
Bu nedenle, ifadelerin arkasındaki mantığı açıklayan yorumlar eklemenizi öneririm. Sorguları okunabilir kılmak için basit alt sorgular veya Common Table Expressions (CTE) de kullanabilirsiniz. Analiz ve raporlama için okunabilir ve sürdürülebilir sorgular yazmayı öğrenmek üzere Reporting in SQL kursumuza göz atın.
SQL Yöntemlerinin Neden Farklı Olduğuna Dair Bir Not
SQL Server, PostgreSQL ve Oracle gibi farklı veritabanı sistemlerinde tarih karşılaştırmalarına yönelik SQL yöntemlerindeki çeşitlilik, her veritabanı yönetim sisteminin benzersiz evrimi ve tasarım felsefelerinden kaynaklanır. Her sistem bağımsız olarak geliştirildi ve farklı kullanıcı ihtiyaçlarına ve uyumluluk gereksinimlerine hizmet etti; bu da SQL standartlarının farklı uygulanmasına ve ek tescilli özelliklere yol açtı.
Örneğin:
- SQL Server, Microsoft tarafından geliştirildi ve Windows ekosisteminde entegrasyon ve kullanım kolaylığı hedefiyle diğer Microsoft ürünleriyle yakından hizalanan işlev ve sözdizimlerini içerir.
- PostgreSQL açık kaynaklı bir projedir ve genişletilebilirliğe güçlü bir vurgu yapar. Bu esneklik, topluluğu tarafından optimize edilebilen veya genişletilebilen çeşitli tarih işlevleri ve işleçlerini teşvik eder.
- Oracle genellikle kurumsal uygulamalar için yüksek ölçeklenebilirlik ve güvenilirliğe odaklanır; bu da tarihler ve diğer veri türlerinin ele alınmasında belirli optimizasyonlara, sıklıkla karmaşık ve yüksek hacimli işlem ortamlarına odaklanılmasına yol açar.
Sonuç
Gerçek dünyadaki senaryolarda SQL işlevlerini ne zaman uygulamanız gerektiğini bilmek için farklı becerileri pratik etmenizi öneririm. DataCamp'in SQL Fundamentals ve Intermediate SQL kurslarını değerlendirin. Farklı analiz tekniklerinde ustalaşmanıza yardımcı olmak için, hevesli veri analistleri ve veri bilimciler için Associate Data Analyst in SQL kursunu da öneririm. Bu kurslar ayrıca özgeçmişte iyi duran SQL Associate Certification sınavına hazırlanmanıza da yardımcı olacaktır.
Sıkça Sorulan Sorular
Karşılaştırma işleci nedir?
Karşılaştırma işleçleri iki değeri karşılaştırır ve karşılaştırılan değere göre sonuçların doğru ya da yanlış olduğunu döndürür.
SQL tarih değerlerinde yaygın olarak hangi işleçler kullanılır?
SQL tarih değerlerinde yaygın olarak kullanılan işleçler şunlardır: eşittir (=), büyüktür (>), küçüktür (<), büyüktür veya eşittir (>=), küçüktür veya eşittir (<=).
BETWEEN işleci SQL'de ne zaman kullanılır?
BETWEEN işleci, belirli bir aralık içindeki kayıtları filtreler.
Tarihlerimde NULL değerler varsa hangi işleci kullanmalıyım?
Tarihlerin NULL değerler içerdiği durumlarda, null değerleri ele almak ve sorgu sonuçlarında hatalardan kaçınmak için IS NULL ifadesini eklemelisiniz.
SQL sorgum tarih değerini filtrelerken hata döndürürse ne yapmalıyım?
Tarihlerinizin doğru biçimde olduğundan emin olun. Değilse, YYYY-MM-DD gibi tutarlı bir biçime dönüştürün.
