仅从sql数据库中检索具有todays';日期
我使用SQLServer2008R2存储数据,使用C#web应用程序检索数据并将其显示在gridview中 我已经存储了不同日期的数据,现在我想根据日期在C#gridview上每天显示数据,如:今天是8月15日,日期为8月15日的数据只填充gridview 我创建了数据源以填充gridview,该gridview以前显示所有数据,而不考虑日期: 代码如下:仅从sql数据库中检索具有todays';日期,sql,sql-server,date,Sql,Sql Server,Date,我使用SQLServer2008R2存储数据,使用C#web应用程序检索数据并将其显示在gridview中 我已经存储了不同日期的数据,现在我想根据日期在C#gridview上每天显示数据,如:今天是8月15日,日期为8月15日的数据只填充gridview 我创建了数据源以填充gridview,该gridview以前显示所有数据,而不考虑日期: 代码如下: <asp:SqlDataSource ID="SqlDataSource1" runat="server" Con
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:LoginConnectionString %>"
SelectCommand="SELECT * FROM [Student]"></asp:SqlDataSource>
现在我只想显示当前日期/今天日期数据,如上所述。
请指导我如何编写sql命令来实现上述功能。
表名为Student
列名是存储为datetime的日期
谢谢将where子句添加到select语句中,如下所示:
Where Cast(Student.Date As Date) = Cast(GetDate() As Date)
编辑:更新为使用强制转换而不是转换,并使其仅与今天的日期相等。将where子句添加到select语句中,如下所示:
Where Cast(Student.Date As Date) = Cast(GetDate() As Date)
编辑:更新为使用强制转换而不是转换,并使其仅与今天的日期相等。您可以使用DATEDIFF
SELECT * FROM tablename where datefield = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
编辑
我现在无法检查,但您可以通过下面的查询来调整和提取日期之间的所有日期
SELECT * FROM TEST_NAMES
where Date < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 1)
and
Date >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
您可以使用DATEDIFF
SELECT * FROM tablename where datefield = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
编辑
我现在无法检查,但您可以通过下面的查询来调整和提取日期之间的所有日期
SELECT * FROM TEST_NAMES
where Date < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 1)
and
Date >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
假设“日期”也包含一天中的时间信息,则在与当前日期进行比较时,必须将其去除:
WHERE CAST(Student.[Date] AS DATE) = CAST(GETDATE() AS DATE)
假设“日期”也包含一天中的时间信息,则在与当前日期进行比较时,必须将其去除:
WHERE CAST(Student.[Date] AS DATE) = CAST(GETDATE() AS DATE)
IMHO将使用一个开放的范围,这比将专栏转换为日期要好:
DECLARE @today DATE = GETDATE();
SELECT
...
WHERE column >= @today AND column < DATEADD(DAY, 1, @today);
DECLARE@today-DATE=GETDATE();
挑选
...
其中列>=@今天和列
.IMHO,比将列转换为日期更好的方法是使用开放范围:
DECLARE @today DATE = GETDATE();
SELECT
...
WHERE column >= @today AND column < DATEADD(DAY, 1, @today);
DECLARE@today-DATE=GETDATE();
挑选
...
其中列>=@今天和列
.这可能不是“正确”的方法,但将其转换为长度为10的varchar将删除时间戳,然后将其转换回DateTime(不再具有时间戳)。当我需要删除一天中的时间信息时,我总是将(GetDate()转换为DATE)-我怀疑它的计算成本不如来回转换为字符数据类型。这不会返回任何日期大于今天日期的数据吗?“我认为这个问题要求平等。”丹·阿泰德(sp?)指出。谢谢。Hi ganders谢谢我按照你建议的方式做了,但它仍然显示数据库的所有数据,但不是当前日期的数据。这可能不是“正确”的方式,但将其转换为长度为10的varchar将删除时间戳,然后将其转换回日期时间(不再有时间戳)。当我需要删除一天中的时间信息时,我总是强制转换(GetDate()为DATE)-我怀疑它在计算上没有来回转换为字符数据类型那么昂贵。这不会返回日期大于今天日期的任何内容吗?“我认为这个问题要求平等。”丹·阿泰德(sp?)指出。谢谢。Hi ganders谢谢,我按照你的建议做了,但它仍然显示数据库的所有数据,但不是当前日期的数据。使用此命令,它不会在页面上显示任何数据和网格视图,这是因为你的datefield类型为DateTime,这意味着它可能还包含一天中的时间信息,应该去掉这些信息。请在别处查看我的答案。@user2684131我目前无法查看查询,但类似于我编辑中的示例也应该可以。实际上,您希望避免在
WHERE
子句中使用DATEDIFF
,因为。一个开放的范围应该有=和
@Aaron Bertrand。谢谢,因为我不能测试自动取款机。我编辑了我的答案。使用此命令,它不会在页面上显示任何数据和gridview,这是因为您的datefield类型为DateTime,这意味着它可能还包含一天中的时间信息,这些信息应该被删除。请在别处查看我的答案。@user2684131我目前无法查看查询,但类似于我编辑中的示例也应该可以。实际上,您希望避免在WHERE
子句中使用DATEDIFF
,因为。一个开放的范围应该有=和
@Aaron Bertrand。谢谢,因为我不能测试自动取款机。我编辑了我的答案。瞧,谢谢@Don问题解决:)@Don你能帮我吗瞧,谢谢@Don问题解决:)@Don你能帮我吗