2016-04-11 32 views
1

Umarım birisi bana yardımcı olabilir sql veritabanında yeniim. Seçilen kullanıcı tarih tekabül arasında olduğu kullanıcı, sonra sürüm iade edilmesi gereken bazı tarih seçildiğindeiki tarih arasındaki bir tarih seçin

:

-------------------------------------- 
id  from   to  version 
--------------------------------------- 
0  01.01.70 31.12.79  v1  
1  01.01.80 31.12.89  v2  

Şimdi şu davranışı ulaşmak istiyoruz: aşağıdaki tablo vardır from ve to tarihleri.

örnekler:

user_date = 01.01.70 ------> v1 should be returned 
user_date = 01.01.75 ------> v1 should be returned 
user_date = 31.12.79 ------> v1 should be returned 
user_date = 01.01.80 ------> v2 should be returned 
user_date = 01.01.85 ------> v2 should be returned 
user_date = 31.12.89 ------> v2 should be returned 

Bu

select version from versions_table where user_date between from and to; 
+0

Denemenizin sonucu neydi? –

+0

, bir tarihten diğerine veri türüdür? – cableload

cevap

1

Sen sorguya içine bir değişken geçmek gerekir bir sütundur. Vekil .

select version 
from versions_table 
where to_date('<myInputDate>', 'dd.mm.yy') between to_date('from', 'mm.dd.yy') and to_date('to', 'mm.dd.yy'); 

sen (hayır düzeltme imi "<>") için ilgilenen tarih yerine emin olun.

[değiştir] Onları düzenlemezseniz, sorguyla ilgili sorunlara neden olan bir alfabetik sıralamayı gerçekleştirir.

3

from bir sütun adı için kötü bir fikir olabilir çalıştı. Bu SQL sorgusu test edebilir: Bununla

SELECT version 
FROM versions_table 
WHERE user_date between versions_table.from 
     AND versions_table.to; 

Eğer masanın versions_table değil anahtar kelime FROM

+0

veya sadece [ile] ve [[]] –

+0

köşeli parantez koyabilirsiniz Tamam, başka bir şekilde olurdu, Teşekkürler! –

+2

@ArnelAves Oracle'da değil. Bunun yerine, çift-tırnak kullanacaksınız, bununla birlikte OP, o alana doğru büyük harf kullanımı ve o zamandan sonra çifte alıntı ile başvurmalıdır. Sütun adını from_date ve to_date gibi bir şeye değiştirmek çok daha kolay. – Boneist

1

deneyin sütunları demek olduğunu gösterir. programlama diline bağlı Bunu kolayca yapabilirsiniz - Ben varsayıyorum "user_date" versions_table

select version from versions_table v where user_date=(select user_date from versions_table a where user_date between v.from and v.to); 
İlgili konular