根据不同格式的日期过滤日期时间

时间:2014-01-14 22:03:21

标签: asp.net sql sql-server vb.net datetime

我想通过将sql server中gridview类型的日期时间列与日期文本框进行比较来过滤datetime


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"/>,因此我不再需要关注日期格式。

虽然现在将datedatetime进行比较存在问题。

3 个答案:

答案 0 :(得分:1)

这是你可以做的

select * from MyTable where convert(varchar, a, 103) = '03/24/2013'

您可能不希望将日期与秒数进行比较。 equasion的右侧来自文本框

如果你真的想要它,那么就这样做

Dim sql as String = "select * from MyTable where convert(varchar, a, 103) = @1"

@1是您要添加到Command Object的参数,它将具有您文本框的值。

答案 1 :(得分:0)

http://msdn.microsoft.com/en-us/library/ms187928.aspx

使用格式103将'dd / mm / yyyy'字符串转换为日期。你正在使用105,这是'dd-mm-yyyy'

答案 2 :(得分:0)

您不需要进行任何字符串转换来比较SQL中的DateTime。当您使用LIKE时,SQL会将DateTime转换为字符串值,您需要确保在两端使用相同的格式。如果您的源数据不包含任何时间组件,那么您应该能够:

FilterExpression="ScheduledDateTime = {0}"

如果 包含时间组件,并且您想截断时间,可以尝试:

FilterExpression="dateadd(dd, datediff(dd,0, ScheduledDateTime ), 0) = {0}"

FilterExpression="ScheduledDateTime BETWEEN {0} AND dateadd(dd, 1, {0})"