【问题标题】:Calendar extender日历扩展器
【发布时间】:2009-03-11 09:46:22
【问题描述】:

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

我在存储过程中使用了以下代码。表的名称是 FileM

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

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

【问题讨论】:

    标签: asp.net sql


    【解决方案1】:
    -- 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'
    

    【讨论】:

      【解决方案2】:

      以下代码将删除您的日期时间值的时间部分(删除我的意思是使其成为 00:00:00 即午夜):-

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

      所以你可以使用:-

      Select * from FileM Where dateadd(d,datediff(d,0,OldDate),0) = @OldDate

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

      【讨论】:

      • 您最好通过从参数中剥离时间并将其用作下限并使其上限为 11:59:59.997 来生成一个范围(0.999 舍入到午夜下一个日期)。这样就可以使用索引。如果更改表列值 SQL 不能使用索引
      【解决方案3】:

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

      我喜欢 Luke 对灵活性的回答,但如果您没有该选项并且只能更正现有的存储过程,也许这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-04-24
        • 2011-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多