在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); 
+2

我认为'yyyy-MM-dd'(等等)是普遍的。 – 2010-10-05 17:45:54

+0

正如其他人所说,但值得重复,你真的不应该这样做。 – ProfK 2010-10-05 18:09:53

+0

@ProfK:为什么我不应该? – Lorenzo 2010-10-05 18:16:39

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); 
+0

不,我不使用字符串连接。请参阅我的编辑了解更多详情。我忘了提及我使用NetTiers的强类型查询对象。谢谢 – Lorenzo 2010-10-05 18:18:21

+0

@Lorenzo,我更新了我的回复,以解决您在问题中提供的新信息,但是这已经将问题带入了我没有使用过的技术中,我在这里用一粒盐来说。 – 2010-10-05 19:01:16

+0

没有克里斯我不能传递给各种追加方法的日期实例,因为他们只接受字符串参数。 :) – Lorenzo 2010-10-08 13:29:26