日历扩展器

时间:2009-03-11 09:46:22

标签: asp.net sql

我在asp.net中使用calendarextender控件。它只显示日期,而不是时间。但是在插入数据库时​​,会自动插入时间。但是在使用日期条件从数据库中检索数据时,不会显示相应的记录。我可以对storedprocedure进行哪些修改来解决此问题。

我在storedprocedure中使用了以下代码。表的名称是FileM

Select * from FileM Where OldDate = '@OldDate%'

databese中的OldDate字段存储为日期时间,即日期是我插入的日期,但时间是08:00:00:00000:00:00:000。所以上面的查询给出了随时间变化的日期记录{{1 },但不是00:00:00:000

3 个答案:

答案 0 :(得分:2)

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

如果您能够修改存储过程,那么通过传递两个DATETIME参数,指定所需范围的开始和结束时间,您可以获得更大的灵活性和性能:

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

然后像这样调用您的存储过程,例如:

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

答案 1 :(得分:0)

以下代码将删除日期时间值的时间部分(通过剥离我的意思是00:00:00,即午夜): -

DATEADD(d,DATEDIFF(d,0,MyDateTimeColumn),0)

所以你可以使用: -

从FileM中选择* dateadd(d,datediff(d,0,OldDate),0)= @OldDate

或者,如果您使用的是SQL Server 2008,则会有new date data type(没有时间组件)。

答案 2 :(得分:0)

只要您的日期没有明确给出时间组件,它们都应默认为00:00:00.000。在这种情况下,简单的相等比较就可以了。但是在你的代码中,你会在你的参数周围加上引号,这意味着你现在正在将你的日期与文字字符串“@ OldDate%”进行比较。删除引号,看看是否有帮助。

我喜欢Luke对灵活性的回答,但是如果你没有这个选项并且只能纠正现有的存储过程,那么这可能会有所帮助。