Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ]Tarih ve Saat aralığı sorgulama
#31
(22-04-2019, Saat: 10:06)wiseman Adlı Kullanıcıdan Alıntı:
(21-04-2019, Saat: 21:56)mcuyan Adlı Kullanıcıdan Alıntı: Hocam dedğiniz yapabiliyorum. Yani o gün içinde x saat ile y saat arasını.. Cidden neresinin çalışmadığını anlamadım..

Selamlar
@esistem  üstadığımızın dediği gibi,  saat aralığı 01:00 - 03:00 olursa zaten yazdığınız kod doğru çalışıyor sorun yok.
Sorun bir önceki akşamın saat 21:00 - ertesi gün 03:00 arasındaki sorguyu aldığınızda çıkıyor ortaya.

verilen kısıtta gün değişimi olduğu için, raporu alamıyorsunuz. Keşke bana bir bağlanma şansınız olsa da ben size sorunu direkt gösterebilsem hocam. Sorunun ne olduğunu görebileceksiniz.
Ancak Aşağıdaki şekilde çözülüyor @wiseman ;
Önce tarih aralığı sonra da zaman damgasını yazmanız gerekiyor, başka türlü çözemedim Sad
yalnız istenen saat 00:00 'ı geçiyorsa bir sonraki tarihi yazmanız gerekli 2. ZAMAN sorgusu satırında
SELECT DATE( ZAMAN ) AS TARIH, TIME( ZAMAN ) AS SAAT, DEGER
FROM test
WHERE DATE( ZAMAN ) >=  '2019-04-18'
AND DATE( ZAMAN ) <=  '2019-04-19'
AND 
(
( TIME( zaman ) >=  '22:00:00' AND TIME( zaman ) <=  '23:00:02' )
OR 
( TIME( zaman ) >=  '00:00:00' AND TIME( zaman ) <=  '02:00:02' )
)
ORDER BY TARIH, SAAT
WWW
Cevapla
#32
(22-04-2019, Saat: 10:22)esistem Adlı Kullanıcıdan Alıntı:
(22-04-2019, Saat: 10:06)wiseman Adlı Kullanıcıdan Alıntı: Selamlar
@esistem  üstadığımızın dediği gibi,  saat aralığı 01:00 - 03:00 olursa zaten yazdığınız kod doğru çalışıyor sorun yok.
Sorun bir önceki akşamın saat 21:00 - ertesi gün 03:00 arasındaki sorguyu aldığınızda çıkıyor ortaya.

verilen kısıtta gün değişimi olduğu için, raporu alamıyorsunuz. Keşke bana bir bağlanma şansınız olsa da ben size sorunu direkt gösterebilsem hocam. Sorunun ne olduğunu görebileceksiniz.
Ancak Aşağıdaki şekilde çözülüyor @wiseman ;
Önce tarih aralığı sonra da zaman damgasını yazmanız gerekiyor, başka türlü çözemedim Sad
yalnız istenen saat 00:00 'ı geçiyorsa bir sonraki tarihi yazmanız gerekli 2. ZAMAN sorgusu satırında
SELECT DATE( ZAMAN ) AS TARIH, TIME( ZAMAN ) AS SAAT, DEGER
FROM test
WHERE DATE( ZAMAN ) >=  '2019-04-18'
AND DATE( ZAMAN ) <=  '2019-04-19'
AND 
(
( TIME( zaman ) >=  '22:00:00' AND TIME( zaman ) <=  '23:00:02' )
OR 
( TIME( zaman ) >=  '00:00:00' AND TIME( zaman ) <=  '02:00:02' )
)
ORDER BY TARIH, SAAT

@esistem

Sorgunuzdaki saati 06:00 olarak değiştirerek aldım raporu. 18.03.2019 da istenmeyen saat aralığı da geliyor. 

2019-03-18    00:00:02    6800
2019-03-18    01:00:02    6800
2019-03-18    02:00:02    6800
2019-03-18    03:00:02    6800
2019-03-18    04:00:02    6800
2019-03-18    05:00:02    6800
2019-03-18    06:00:02    6800
2019-03-18    22:00:02    6800
2019-03-18    23:00:02    6800
2019-03-19    00:00:02    6800
2019-03-19    01:00:02    6800
2019-03-19    02:00:02    6800
2019-03-19    03:00:02    6800
2019-03-19    04:00:02    6800
2019-03-19    05:00:02    6800
2019-03-19    06:00:02    6800
2019-03-19    22:00:02    6800
2019-03-19    23:00:02    6800
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#33
WHERE kısmına CASE WHEN saat şu aralıkta değilse NULL ELSE tarih END denediniz mi
bir altta da null olanları filterele tabii
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#34
(22-04-2019, Saat: 10:35)wiseman Adlı Kullanıcıdan Alıntı:
(22-04-2019, Saat: 10:22)esistem Adlı Kullanıcıdan Alıntı: Ancak Aşağıdaki şekilde çözülüyor @wiseman ;
Önce tarih aralığı sonra da zaman damgasını yazmanız gerekiyor, başka türlü çözemedim Sad
yalnız istenen saat 00:00 'ı geçiyorsa bir sonraki tarihi yazmanız gerekli 2. ZAMAN sorgusu satırında
SELECT DATE( ZAMAN ) AS TARIH, TIME( ZAMAN ) AS SAAT, DEGER
FROM test
WHERE DATE( ZAMAN ) >=  '2019-04-18'
AND DATE( ZAMAN ) <=  '2019-04-19'
AND 
(
( TIME( zaman ) >=  '22:00:00' AND TIME( zaman ) <=  '23:00:02' )
OR 
( TIME( zaman ) >=  '00:00:00' AND TIME( zaman ) <=  '02:00:02' )
)
ORDER BY TARIH, SAAT

@esistem

Sorgunuzdaki saati 06:00 olarak değiştirerek aldım raporu. 18.03.2019 da istenmeyen saat aralığı da geliyor. 

2019-03-18    00:00:02    6800
2019-03-18    01:00:02    6800
2019-03-18    02:00:02    6800
2019-03-18    03:00:02    6800
2019-03-18    04:00:02    6800
2019-03-18    05:00:02    6800
2019-03-18    06:00:02    6800
2019-03-18    22:00:02    6800
2019-03-18    23:00:02    6800
2019-03-19    00:00:02    6800
2019-03-19    01:00:02    6800
2019-03-19    02:00:02    6800
2019-03-19    03:00:02    6800
2019-03-19    04:00:02    6800
2019-03-19    05:00:02    6800
2019-03-19    06:00:02    6800
2019-03-19    22:00:02    6800
2019-03-19    23:00:02    6800

bu çıktının sorgusu nedir tam olarak ?

anladım, bu seferde bir önceki günü sokuyor döngüye Sad o zaman yapacak tek şey olarak, daha önce yazdığımız gibi her gün için ayrı ayrı sorgu üretmek kalıyor Sad

o zamansa şöyle bir sorgu olmalı, başlangıç ve bitişi tam zaman damgası olarak vermelisiniz. sonra saat damgalarını yazmalısınız
SELECT DATE( ZAMAN ) AS TARIH, TIME( ZAMAN ) AS SAAT, DEGER
FROM test
WHERE ZAMAN >=  '2019-04-19 05:00:00'
AND ZAMAN <=  '2019-04-21 02:00:00'
AND (
(
TIME( zaman ) >=  '05:00:00'
AND TIME( zaman ) <=  '23:00:02'
)
OR (
TIME( zaman ) >=  '00:00:00'
AND TIME( zaman ) <=  '02:00:02'
)
)
ORDER BY TARIH, SAAT
WWW
Cevapla
#35
(22-04-2019, Saat: 10:47)mrmarman Adlı Kullanıcıdan Alıntı: WHERE kısmına CASE WHEN saat şu aralıkta değilse NULL  ELSE tarih END denediniz mi
bir altta da null olanları filterele tabii

Muharrem Hocam,

Saat aralığı, kullanıcı tarafından rapor alınırken belirlendiği için, case kullanamıyorum. 3 farklı saat aralıkları kullanıyorlar ve hepsi de değişken. Elektrik sayacının değerleri bunlar. Sad
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#36
Değişken de olsa SELECT satırlarını DELPHI yakasında hazırlıyorsan, şöyle bir şey denemek ister misiniz. 

Idea  IN kısmını siz kullanıcı girişine göre değiştirebilirsiniz.

SELECT * FROM test
WHERE 1=1
AND zaman BETWEEN '2019-03-18' and '2019-03-20' 
AND DATE_FORMAT(zaman,'%H') IN ('22', '23', '00', '01', '02', '03', '04', '05', '06')
ORDER by zaman

NOT : Merak edenler olabilir. BETWEEN kullanırken son tarih hariç hesaplanır. Örnekte 19'u isteniyorsa 20 denmesinin sebebi bu.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#37
(22-04-2019, Saat: 10:06)wiseman Adlı Kullanıcıdan Alıntı:
(21-04-2019, Saat: 21:56)mcuyan Adlı Kullanıcıdan Alıntı: Hocam dedğiniz yapabiliyorum. Yani o gün içinde x saat ile y saat arasını.. Cidden neresinin çalışmadığını anlamadım..

Selamlar
@esistem  üstadığımızın dediği gibi,  saat aralığı 01:00 - 03:00 olursa zaten yazdığınız kod doğru çalışıyor sorun yok.
Sorun bir önceki akşamın saat 21:00 - ertesi gün 03:00 arasındaki sorguyu aldığınızda çıkıyor ortaya.

verilen kısıtta gün değişimi olduğu için, raporu alamıyorsunuz. Keşke bana bir bağlanma şansınız olsa da ben size sorunu direkt gösterebilsem hocam. Sorunun ne olduğunu görebileceksiniz.
Haa Pardon şimdi anladım.. PArdon.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#38
(22-04-2019, Saat: 18:06)mrmarman Adlı Kullanıcıdan Alıntı: Değişken de olsa SELECT satırlarını DELPHI yakasında hazırlıyorsan, şöyle bir şey denemek ister misiniz. 

Idea  IN kısmını siz kullanıcı girişine göre değiştirebilirsiniz.

SELECT * FROM test
WHERE 1=1
AND zaman BETWEEN '2019-03-18' and '2019-03-20' 
AND DATE_FORMAT(zaman,'%H') IN ('22', '23', '00', '01', '02', '03', '04', '05', '06')
ORDER by zaman

NOT : Merak edenler olabilir. BETWEEN kullanırken son tarih hariç hesaplanır. Örnekte 19'u isteniyorsa 20 denmesinin sebebi bu.

Sevgili Muharrem Hocam,

Bu şekilde çalıştı. Yine derdime çare oldunuz. @esistem , @mcuyan  sizlere de çok teşekkür ederim. Çok uğraştırdım sizleri. @"Fesih ARSLAN" hocam, bir daha kitabı yanımdan ayırırmam tövbeee  Smile
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#39
@wiseman, aşağıdaki MSSQL sorgusunun işinize yaradığını yazmışsınız:

(18-04-2019, Saat: 23:37)wiseman Adlı Kullanıcıdan Alıntı:
select * from tagdegerleri 
WHERE (zaman BETWEEN '2019-03-18' AND '2019-03-20')
AND (convert(varchar, zaman, 24) > '22:00:00' or convert(varchar, zaman, 24) < '06:00:00')


Bence bunun MYSQL karşılığı şöyle:
SELECT * FROM tagdegerleri 
WHERE (zaman BETWEEN '2019-03-18' AND '2019-03-20')
AND (
 DATE_FORMAT(zaman,'%H:%i:%s') > '22:00:00' OR DATE_FORMAT(zaman,'%H:%i:%s') < '06:00:00');
There's no place like 127.0.0.1
WWW
Cevapla
#40
(23-04-2019, Saat: 12:18)SimaWB Adlı Kullanıcıdan Alıntı: @wiseman, aşağıdaki MSSQL sorgusunun işinize yaradığını yazmışsınız:

(18-04-2019, Saat: 23:37)wiseman Adlı Kullanıcıdan Alıntı:
select * from tagdegerleri 
WHERE (zaman BETWEEN '2019-03-18' AND '2019-03-20')
AND (convert(varchar, zaman, 24) > '22:00:00' or convert(varchar, zaman, 24) < '06:00:00')


Bence bunun MYSQL karşılığı şöyle:
SELECT * FROM tagdegerleri 
WHERE (zaman BETWEEN '2019-03-18' AND '2019-03-20')
AND (
 DATE_FORMAT(zaman,'%H:%i:%s') > '22:00:00' OR DATE_FORMAT(zaman,'%H:%i:%s') < '06:00:00');

Selamlar,

MSSQL de bu şekilde yazdığımda gerekli sonucu elde ettim. Aynı şekilde sizin yazdığınız da çalışmaktadır. İlginize teşekkür ederim. Smile
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Fastreport İçindekiler Sayfası Oluşturma [ÇÖZÜLDÜ] bydelphi 1 181 18-03-2024, Saat: 12:11
Son Yorum: bydelphi
  Çok Satırlı Filtreleme [Çözüldü] bünyamin68 12 1.253 14-02-2024, Saat: 22:42
Son Yorum: mustafaozpinar
  [ÇÖZÜLDÜ] macos işletim sistemine program yazmak shooterman 5 451 02-02-2024, Saat: 09:54
Son Yorum: shooterman
  COZULDU veritabani prg yerine ne kullanabilirim. sadikacar60 8 694 29-01-2024, Saat: 18:41
Son Yorum: sadikacar60
  DbGrid'de Seçili Satırların Fast Reportta Raporlanması [ÇÖZÜLDÜ] bünyamin68 4 637 17-12-2023, Saat: 15:08
Son Yorum: bünyamin68



Konuyu Okuyanlar: 1 Ziyaretçi