在WHERE子句中使用datetime执行查询
我使用sql server 2008 R2作为数据存储。在WHERE子句中使用datetime执行查询
到现在为止在测试机上我有软件的英文版本,并用来做查询格式化日期时间字段作为
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 Data elements and interchange formats — Information interchange — Representation of dates and times允许两者YYYY-MM-DD和YYYYMMDD。 SQL Server识别ISO规范。
虽然标准允许两个 YYYY-MM-DD和YYYYMMDD格式 完整的日历日期 表示,如果天[日]是 则省略只有YYYY-MM格式 是允许的。通过不允许使用 表格YYYYMM的日期,该标准避免了 与表示YYMMDD(仍然经常使用 )的截断 混淆。
我更喜欢YYYYMMDD格式,但我认为这是因为我只知道该开始,对我来说它似乎更普遍,已经取消了可能被认为是特定于区域的字符。
就个人而言,我总是用yyyy-MM-dd
。这也使得它可以排序为一个字符串。
但是,日期是日期是日期。没有必要将日期更改为字符串。在.NET中,用户DateTime
。
你应该共享你正在使用的代码来执行查询,但我想你正在动态地使用字符串concats来构建查询和参数来建立一个SQL查询。您应该使用参数化查询,然后您可以将数据作为日期对象传递,而无需转换字符串。
例如,如果你的查询可以是这样的
DateTime fromDate = DateTime.Now;
SqlCommand cmd = new SqlCommand(
"select * from Orders where fromDT = @fromDate", con);
cmd.Parameters.AddWithValue("@fromDate", fromDate);
...
作为一个良好的副作用,这会降低你的风险
SQL injection。
更新:编辑之后,确实改变了问题上下文,我不得不承认我对.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'(等等)是普遍的。 – 2010-10-05 17:45:54
正如其他人所说,但值得重复,你真的不应该这样做。 – ProfK 2010-10-05 18:09:53
@ProfK:为什么我不应该? – Lorenzo 2010-10-05 18:16:39