【发布时间】:2014-02-03 04:27:43
【问题描述】:
我想通过将 sql server 中 datetime 类型的日期时间列与日期文本框进行比较来过滤 gridview。
sql server 中的 datetime 列以 yyyy-mm-dd hh:mm:ss.sss 格式存储/显示(默认)。
但是日期文本框的格式为 dd/mm/yyyy。
<asp:TextBox ID="date_tb" runat="server" TextMode="Date"></asp:TextBox>
我尝试使用
FilterExpression="CONVERT(VARCHAR, [ScheduledDateTime], 105) LIKE '%{0}%'">
但它没有用。
FilterExpression="CONVERT([ScheduledDateTime], 'System.String', 105) LIKE '%{0}%'">
也没有用。
然后我尝试使用
SelectCommand="SELECT [ScheduledDateTime], CONVERT(VARCHAR, [ScheduledDateTime], 105) as d ... FROM table1
FilterExpression="d LIKE '%{0}%'">
但效果不佳。
编辑:
我已将ControlParameter 更改为<asp:ControlParameter Name="ScheduledDateTime" ControlID="date_tb" PropertyName="Text" type="DateTime"/>,因此我不再需要担心日期格式。
虽然现在比较 date 和 datetime 存在问题。
【问题讨论】:
-
日期时间以二进制形式存储 - 它们不以任何“格式”存储
-
试试这个:
FilterExpression="Cast([ScheduledDateTime] as Date)='{0}'"。但这不是很酷的原因是(我相信)它需要您的 SQL Server 在英国规则下运行。这就是为什么 CAST 更好,因为它可以在任何地方工作 -
@T.S.该表达式包含未定义的函数调用 cast()。
-
@j_t_fusion:抱歉,在上一篇文章中,我的意思是更好地转换,因为不用担心 Sql Server 的本地化。在我的服务器上这有效:
where cast(a as date) = '03/24/2013'. -
@j_t_fusion:你是对的。我们在这里所做的对您不起作用,因为您使用的是 SqlDataSource。它仅限于某些过滤集。您不能在此处调用 Sql Server 函数 - 它再次用于数据行集合,而不是 Sql Server Db。试试这个:
FilterExpression="[ScheduledDateTime] > <Your date - 1> And [ScheduledDateTime] < <Your date + 1>。这应该是肯定的
标签: asp.net sql sql-server vb.net datetime