2009-03-11 16 views
1

Asp.net'de calendarextender denetimini kullanıyorum.Zaman değil tarih görüntüler, ancak veritabanına eklenirken, zaman otomatik olarak eklenir.Ama durumun kullanıldığı tarih kullanılarak veritabanından veri alınırken, herhangi bir bağıntı kaydı yok displays.Oluşturma işleminde yapılan değişiklik, bu sorunu çözmek için yapabilirim.Calendar extender

Tablo Fin storedprocedure.Name kodu aşağıdaki kullanılan filem

olan OldDate = '@ OldDate%'

i Databese içinde

OldDate alan tarih saat, yani güncel olarak depolar olan tarih eklenerek filem gelen

seçin * ancak saat 08: 00: 00: 00 veya 00: 00: 00: 000'dir. Yukarıdaki sorgu, 00: 00: 00: 000 olarak saatle birlikte gelen ancak 08:00:00 ile gelmeyen tarih kayıtları verir. : 000

cevap

2
-- assumes that the @OldDate parameter is a DATETIME 
SELECT * 
FROM FileM 
WHERE DATEDIFF(day, OldDate, @OldDate) = 0 

o zaman daha fazla esnekliğe sahip olabilir saklı yordam değiştirmek yapabiliyorsanız ve performans, iki DATETIME parametreleri geçirerek İhtiyacınız aralığının başlangıç ​​ve bitiş zamanlarını belirterek:

EXEC dbo.GetRangeOfRecords 
    @StartDateTime = '2009-02-25 00:00:00.000', 
    @EndDateTime = '2009-02-25 23:59:59.999' 
0

Aşağıdaki kod: örneğin, bu gibi saklı yordamı çağırmak sonra

CREATE PROCEDURE dbo.GetRangeOfRecords 
@StartDateTime DATETIME, 
@EndDateTime DATETIME 
AS 
SELECT * 
FROM FileM 
WHERE OldDate BETWEEN @StartDateTime AND @EndDateTime 

Ve senin datetime değeri zaman bileşeni çıkarmaz (şerit dışarı tarafından demek yapmak o 0:00:00 yani gece yarısı): -

dateadd (d, datediff (d, 0, MyDateTimeColumn), 0)

böylece kullanabilirsiniz: -

Seç * filem nereye dateadd (d, datediff (d, 0, OldDate), 0) = @OldDate Alternatif

, SQL Server 2008 kullanıyorsanız, orada new date data type (zaman bileşeni olmadan).

+0

Sadece parametrenizden zamanı kaldırarak ve alt sınır için bunu kullanarak ve üst sınır için 11: 59: 59.997 (sonraki tarihin gece yarısına kadar .999 tur) yaparak bir aralık oluşturmaktan daha iyidir . Bu şekilde dizinler kullanılabilir. Tablo sütun değerini değiştirirseniz, SQL, dizinleri kullanamaz –

0

Tarihlerinizden hiçbiri açıkça bir zaman bileşeni vermediği sürece, bunların tümü 00: 00: 00.000 olarak varsayılan değere ayarlanmalıdır. Bu durumda basit bir eşitlik karşılaştırması iyi sonuç verecektir. Yine de kodunuzda, parametrenizin etrafında alıntılar koyarsınız. Yani, artık tarihinizi "@ OldDate%" gibi bir dizeyle karşılaştırırsınız. Alıntıları kaldırın ve yardımcı olup olmadığını görün.

Luke'un esneklik konusundaki cevabını seviyorum, ancak bu seçeneğe sahip değilseniz ve yalnızca mevcut saklı yordamı düzeltebilirseniz, bu yardımcı olabilir.

İlgili konular