WHERE子句中使用日期时间执行查询
-
28-09-2019 - |
题
我使用SQL Server 2008 R2作为数据存储。
到现在为止在测试机上我有软件的英文版本,并用来做查询格式化日期时间字段为
fromDate.ToString("MM/dd/yyyy");
现在我已经部署另一服务器这是在意大利语言上的数据库。我将在我的代码格式改为
fromDate.ToString("dd/MM/yyyy");
有没有一种方法,使查询在一个中立的格式?
谢谢!
修改强>:
我忘了提及,我使用NetTiers与CodeSmith中。下面是一个完整样品
AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate.ToString("MM/dd/yyyy"));
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate.ToString("MM/dd/yyyy"));
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
解决方案
ISO 8601的数据元素和交换格式 - 信息交换 - 表示日期和时间<的/ EM > 允许两者YYYY-MM-DD和YYYYMMDD。 SQL Server识别的ISO规格。
虽然标准允许两个 YYYY-MM-DD和YYYYMMDD格式 完整的日历日期 表示,如果天[日]是 然后省略仅YYYY-MM格式 被允许。通过禁止的日期 形式YYYYMM,标准避免 与截断混乱 表示YYMMDD(仍然经常 使用)。
我喜欢YYYYMMDD格式,但我想这是因为我只知道有关入手,对我似乎更普遍,已经有可能被认为是区域特定的字符做了。
其他提示
<击> 你应该分享您使用的是执行查询的代码,但我猜你是动态生成SQL查询字符串使用到concats构建查询和参数。你还是使用参数化查询,则可以通过数据作为一个Date对象,并没有必要converto的字符串。击>
<击>例如,如果您的查询可能是这样
DateTime fromDate = DateTime.Now;
SqlCommand cmd = new SqlCommand(
"select * from Orders where fromDT = @fromDate", con);
cmd.Parameters.AddWithValue("@fromDate", fromDate);
...
击> <击>作为一个良好的副作用,这会降低你的 SQL注入。 击> 更新:您编辑的不显著变化问题方面,我不得不承认,我有.netTiers项目的零知识后。但是,只是出于好奇你有没有尝试过直接传递日期的实例如下面的?
AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate);
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate);
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
我个人始终使用yyyy-MM-dd
。这也使得它可排序为字符串。
然而,日期是一个日期是日期。有没有必要将日期更改为字符串。在.NET中,用户DateTime
。