1

我在 asp.net 4.0 中有 Web 应用程序,当我要获取我的记录时,我对“FromDate”使用日历控件,然后我的查询如下:

Select * 
From Sec_RoleFeatures
Where RoleId = 39 
  and FeatureCode = 'MR' 
  and FromDate='12/12/2012 11:05:05 AM'

由于此`FromDate字段日期格式与 sql 格式不匹配,因此结果是它没有给出记录null

所以在这种情况下我该怎么办?如何将我的日期格式与 sql 日期格式匹配?

4

4 回答 4

5

根本不要在 SQL 中传递值。对像这样的所有值使用参数化 SQL 。好处:

  • SQL 更干净(没有代码和数据的混合)
  • 避免 SQL 注入攻击(可能与这里无关,但绝对适用于字符串)
  • 避免转换问题

从根本上说,尽可能避免字符串转换。不仅在数据库工作中,而且在一般情况下。DateTime尽可能长时间地将您的数据保持在“自然”类型(此处)。在这种情况下,您根本不需要将其转换为字符串(因为您可以使用参数),那么为什么要这样做呢?

SqlCommand.Parameters有关如何在 SQL 中使用参数的示例,请参阅文档。

于 2012-12-12T06:45:54.353 回答
1

使用反向 ISO 格式:yyyymmdd(所以 12/12/2012 是 20121212)并使用 24 小时格式作为时间。

Select * From Sec_RoleFeatures Where (RoleId = 39) and (FeatureCode = 'MR') and (FromDate = '20121212 11:05:05')
于 2012-12-12T06:37:07.497 回答
0

尝试铸造:

Select * From Sec_RoleFeatures Where RoleId = 39 and FeatureCode = 'MR' and 
CAST(FromDate AS DATE) = CAST('12/12/2012 11:05:05 AM' AS DATE)

这里的优点是,它只会比较忽略时间部分的日期。

于 2012-12-12T06:39:49.100 回答
0

尝试使用

Select * From Sec_RoleFeatures Where RoleId = 39 and FeatureCode = 'MR' and  CONVERT(varchar(10),FromDate,101)='12/12/2012'
于 2012-12-12T06:40:47.570 回答