在C#中查询SQL日期

时间:2009-04-23 06:18:27

标签: sql database

假设我有一个带有Date列的表。在我的C#应用​​程序中,我希望能够使用DateTime列上的LIKE运算符查询行。我的问题是,我该如何处理区域设置?

例如,如果当前区域设置设置为de-DE,则windows的日期格式为dd.mm.yyyy。现在,用户可能会输入%2009之类的内容,从而产生以下查询:

select * from MyTable where to_char(MyDateColumn, 'dd.MM.yyyy') like '%2009'

但是使用不同的区域设置,用户的输入当然会有所不同,因此to_char不再起作用。

我该如何解决这个问题?哦,我正在寻找一个独立于数据库的解决方案。

非常感谢提前!

5 个答案:

答案 0 :(得分:6)

您不想在DATETIME列上使用LIKE运算符,请相信我。

select * from MyTable where year(MyDateColumn) = 2009

select * from MyTable where datepart(yy, MyDateColumn) = 2009

答案 1 :(得分:2)

不要将其转换为文本形式!

使用DATEPART进行检查: http://msdn.microsoft.com/en-us/library/aa258265(SQL.80).aspx

例如:

select * from MyTable where DATEPART(year, MyDateColumn) = 2009

答案 2 :(得分:2)

尤其是使用参数化查询来防止SQL注入攻击。

答案 3 :(得分:1)

dd/mm/yy格式显示日期:

SELECT [Sales_id]
      ,[sales_no]
      ,[sequence_id]
      ,[sales_Date], CONVERT(char(12), sales_Date, 3) as sales_Date1
      ,[Net_Total]
      ,[Roundoff]
     FROM [Furniture].[dbo].[SalesMaster]



288 109 1   2010-08-21 00:00:00.000 21/08/10        1040.00


291 110 1   2010-08-21 00:00:00.000 21/08/10        103.00


294 111 1   2010-08-21 00:00:00.000 21/08/10        7128.00 -0.40

请参阅 http://msdn.microsoft.com/en-us/library/aa172602(SQL.80).aspx

答案 4 :(得分:0)

不要将日期与字符串进行比较。相反,使用类似DATEPART功能的东西来比较年份。