簡體   English   中英

在WHERE子句中使用datetime執行查詢

[英]executing queries with datetime in WHERE clause

我使用sql server 2008 R2作為數據存儲。

到目前為止,在測試機上,我擁有該軟件的英文版,並用於進行查詢,將日期時間字段格式化為

fromDate.ToString("MM/dd/yyyy");

現在,我已將數據庫部署在另一台意大利語的服務器上。 我將代碼中的格式更改為

fromDate.ToString("dd/MM/yyyy");

有沒有辦法以中性格式進行查詢?

謝謝!

編輯

我忘了提到我在CodeSmith中使用NetTiers。 這是一個完整的樣本

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

您應該共享用於執行查詢的代碼,但是我想您正在使用字符串concats動態構建SQL查詢,以構建查詢和參數。 您應該使用參數化查詢,然后可以將數據作為日期對象傳遞,而無需轉換為字符串。

例如,如果您的查詢可能是這樣的

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

ISO 8601 數據元素和交換格式—信息交換—日期和時間的表示允許YYYY-MM-DD和YYYYMMDD。 SQL Server可以識別ISO規范。

盡管標准允許完整的日歷日期表示形式都使用YYYY-MM-DD和YYYYMMDD格式,但是如果省略日期[DD],則僅允許YYYY-MM格式。 通過禁止采用YYYYMM格式的日期,該標准避免了與截斷的表示法YYMMDD(仍然經常使用)混淆。

我更喜歡YYYYMMDD格式,但是我認為這是因為我只是從一開始就知道這一點,而且對我來說,它似乎更通用了,因為它消除了可能被視為特定於區域設置的字符。

就個人而言,我總是使用yyyy-MM-dd 這也使它可以作為字符串進行排序。

但是,日期是日期。 無需將日期更改為字符串。 在.NET中,用戶DateTime

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM