簡體   English   中英

使用SQL比較兩個字符串

[英]Comparing two strings using SQL

我有以下命令,在使用OleDb連接到Access 2010數據庫的C#WinForms應用程序中使用:

oc_payslips = new OleDbCommand("SELECT <fields> FROM Payslips WHERE LicenseID = \"" + IDs[cb_Employees.SelectedIndex] + "\" AND DateOfPayment >= \"" + startDate + "\" AND DateOfPayment <= \"" + endDate + "\"", DB_Connection.con); 

這不起作用。 我最好的猜測是我無法比較使用SQL的兩個字符串。

我們的想法是獲取兩個日期之間的日期記錄,所有日期都具有“dd / MM / yyyy”格式。 日期作為字符串存儲在數據庫中。

我在網上找不到答案,所以這是我的問題:

有沒有辦法比較使用SQL的兩個字符串,並確定哪個是按字母順序排在第一位?

PS:我知道我可以先獲取所有日期,比較它們然后搜索具有正確日期的ID,但我的問題與在單個SQL查詢中執行此操作有關。

你有幾個問題

  • 您應該使用參數化命令而不是使用字符串連接。

  • 您在SQL中使用雙引號而不是單引號作為字符串分隔符。

  • 您將日期比較為字符串。 如果表字段的類型為Date/Time ,則必須使用日期litterals(如果您堅持使用字符串連接)。 如果日期存儲為格式為“dd / MM / yyyy”的字符串,則比較將不起作用。

  • LicenseID 如果是數字類型,則比較LicenseID = 123而不是LicenseID = "123"

如果使用參數化查詢,則最后三個問題會自動消失。

請參閱: 如何:在MSDN上執行參數化查詢


oc_payslips = new OleDbCommand(
    @"SELECT <fields> FROM Payslips
      WHERE LicenseID = @lid AND
      DateOfPayment >= @start AND DateOfPayment <= @end", DB_Connection.con); 

oc_payslips.Parameters.AddWithValue("@lid", IDs[cb_Employees.SelectedIndex]);
oc_payslips.Parameters.AddWithValue("@start", startDate);
oc_payslips.Parameters.AddWithValue("@end", endDate);
...

將日期作為字符串存儲在數據庫中是一個壞主意。 如果你想比較存儲為字符串的日期,只有當字符串被格式化為“yyyy / MM / dd”時才會起作用,正如Vlad Schnakovszki在他的評論中指出的那樣。 但是,您可以嘗試使用

"... CDate(DateOfPayment) BETWEEN @start AND @end"

並確保傳遞DateTime類型的參數。

http://www.tutorialspoint.com/sql/sql-string-functions.htm#function_strcmp

afaik如果它返回-1而不是第一個字符串將在第二個字符串之前使用英文字母

暫無
暫無

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

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