我想通过将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"/>
,因此我不再需要关注日期格式。
虽然现在将date
与datetime
进行比较存在问题。
答案 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})"