Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

MS SQL tarih formatı sorunu

Konu, 'Veritabanları' kısmında Ramazan KURU tarafından paylaşıldı.

  1. Ramazan KURU

    Ramazan KURU Yeni Üye

    Kayıt:
    11 Mayıs 2018
    Mesajlar:
    2
    Beğenilen Mesajlar:
    0
    Şehir:
    Kütahya
    Merhaba Arkadaşlar MS SQL'de aşağıdaki gibi bir tablom var.

    CREATE TABLE [dbo].[Kira](
    [Kira_ID] [int] IDENTITY(1,1) NOT NULL,
    [Kiraci_ID] [int] NOT NULL,
    [Gayrimenkul_ID] [int] NOT NULL,
    [Vade] [datetime] NOT NULL,
    [Kira] [numeric](18, 2) NOT NULL,
    [Aciklama] [nvarchar](max) NULL,
    [Depozito] [numeric](18, 2) NOT NULL,
    [Sira_No] [int] NOT NULL,
    CONSTRAINT [PK_Kira] PRIMARY KEY CLUSTERED

    Bu tablodan vadesi geçmiş Kiraları listeletmek istiyorum. Bunun için aşağıdaki sorguyu kullanıyorum.

    select * from kira where vade < format(getdate(),'dd-MM-yyyy', 'en-us')

    Sonuç olarak bugün hariç 2018 yılı içerisindeki bütün verileri getiriyor.

    Sorgumu;
    select * from kira where vade < '11/05/2018'
    select * from kira where vade < convert(varchar, getdate(), 103)

    şeklinde de deniyorum ama sürekli aynı sonuç veriyor.

    Nasıl düzeltebilirim. Yardımcı olursanız sevinirim. İyi çalışmalar...
     
  2. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    897
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    date bela bişey o sebeple geçmişte kullandığım ve çalışan komutları saklamıştım. Bi kaçını asayım denersin.

    WHERE (CONVERT(VARCHAR(10), movDateTime, 120)) < '2017-09-26'
    SELECT * FROM tbl1 WHERE movMemNo =102 AND movDateTime =CONVERT(smalldatetime, '6.09.2017 16:58:00',
    104)

    Hatta hepsini asayım bulunsun.

    DATE - BETWEEN: SQL Server CONVERT() Function
    WHERE alanında kullanacaksan FORMATI yyyy-mm-dd olmalı -> annsRecDate = '2018.01.02' olmalı (. yada - fark etmiyor yeterki ikisini aynı anda kullanma 01-02.2018 gibi)
    sql de, alan date değilde DATETIME tanımlı ise, between komutunda ilk tarihi dahil ediyor, ikinciyi saat kısmından dolayı dahil etmiyor, o sebeple bitiş tarihine 1 gün ekle.
    alan date tanımılı ise, saat kısmı yoksa, başlangıç ve bitiş tarihini dahil ediyor.
    ----------------------------------------------------------------------------------------------------------------------------
    SELECT ipNo, ipBlockCode, ipDateTime, ipText FROM tbl1 WHERE YEAR(ipDateTime) = '2016'
    WHERE [StartDate] BETWEEN " + DateTime.Now().ToString("dd.MM.yyyy 00:00:00") + " AND " + DateTime.Now.ToString("dd.MM.yyyy 23:59:59")
    WHERE movDateTime BETWEEN '2016-11-09' AND '2017-09-27
    SQL serverden direk tarihi al
    WHERE CONVERT(date, [StartDate])=CONVERT(date, GETDATE())
    GETDATE() fonsiyonu -> 2017-04-13 14:02:14.447 şeklinde döndürüyor. o anki zaman.
    WHERE DATEPART(yyyy, ipDateTime) = '2017' AND DATEPART(mm, ipDateTime) = '06'
    SELECT YEAR(OrderDate) AS Yr
    WHERE st.Name IN ('Germany', 'United Kingdom') AND soh.OrderDate >= '20070101'
    SELECT * FROM tbl1 WHERE sehir IN ('İstanbul','Konya')
    SELECT ipNo FROM tbl1 WHERE (CONVERT(VARCHAR(7), ipDateTime, 120)) = '2017-06'
    WHERE (CONVERT(VARCHAR(10), movDateTime, 120)) <'2017-09-26'
    SELECT CONVERT(VARCHAR(10), annsRecDate, 120)sonuç: 16-08-2017
    SELECT CONVERT(VARCHAR(10), annsRecDate, 104)sonuç: 16.08.2017
    tarih style numaraları
    CAST and CONVERT (Transact-SQL)
    SELECT * FROM tbl1 WHERE movMemNo =102 AND movDateTime =CONVERT(smalldatetime, '6.09.2017 16:58:00', 104)
    DELETE FROM tbl1 WHERE trRecDateTime =CONVERT(smalldatetime, '" + myArr[0] + "', 104)// 6.09.2017 16:58:00 tarih bu formatta ise.
    SELECT * FROM tbl1 WHERE trRecDateTime =CONVERT(smalldatetime, '10.05.2017 11:02:00', 104) // 10-05-2017 11:02:00 de olsa doğru çalışıyor.
    SELECT PARSE('Monday, 13 December 2010' AS datetime2 USING 'en-US') AS Result; sonuç 2010-12-13 00:00:00.0000000
    SELECT PARSE('€345,98' AS money USING 'de-DE') AS Result; sonuç345.98
    SELECT DATEADD(DAY,10,GETDATE())// bugüne 10 gün ekledi.
    SELECT DAY(GETDATE())// bugünün rakamını aldı. month ve yearda alabilirsin.
    SELECT DATEDIFF(DAY,'2012-08-06',GETDATE())// verilen tarihle bugün arasındaki farkı gün cinsinden verdi.
    SELECT * FROM tbl1 WHERE puan NOT BETWEEN 70 AND 90
    SELECT COUNT (*) FROM tbl1 WHERE MONTH(dtarih)=2// şubat ayında doğanlar.
    NOW()sistem tarih saat ini döndürür. SELECT ProductName, Price, Now() AS PerDate
    HATA
    WHERE skDateTime ='20.01.2018 21:20:00'bunda, kayıt olduğu halde bulmaz. yyy.MM.dd olursa buluyor.
    WHERE skDateTime =CONVERT(smalldatetime, '20.01.2018 21:20:00', 104)Aynı kaydı bu şekilde kullanırsan buluyor. 104 kod formatı işi bitiriyor.