假设我有一个带有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不再起作用。
我该如何解决这个问题?哦,我正在寻找一个独立于数据库的解决方案。
非常感谢提前!
答案 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功能的东西来比较年份。