我使用 MS Access 作為資料庫并使用 OLEDB。在資料庫中,我將日期存盤為字串。我無法更改日期型別(我知道將日期用作日期而不是字串會更容易,但我無法更改它。我也無法更改日期格式。)。日期格式為dd.mm.yyyy.
和DD.MM.YYYY.
。我想要做的是將用戶輸入的日期與資料庫中的某個日期進行比較,但我遇到了問題。我不知道用什么函式來轉換字串做日期和比較。我試過convert
, cast
,format
等cdate
。沒有任何效果。也許我沒有正確使用它,或者我只是不知道該怎么做。我在這里閱讀了有關 stackoverflow 的一些主題,但解決方案對我不起作用,因為他們只是將我引導至檔案,而我顯然無法使其作業。
因此,假設我23.07.2021.
在名為的資料庫中有用戶輸入的日期和列move_date
,其中包含字串輸入的日期,并且我想獲取move_date
用戶輸入的日期之前的所有記錄。
我猜 SQL 查詢應該是這樣的
SELECT * FROM table WHERE func("23.07.2021.") < func(move_date)
wherefunc
應該是一些以特定格式將字串轉換為日期的函式。我只是找不到有效的功能。我想我可以用# 框住用戶鍵入的日期,所以它使它成為日期文字,但仍然不知道如何處理列。
任何幫助表示贊賞。
uj5u.com熱心網友回復:
在 Access SQL 中,您可以嵌套Replace
并DateValue
轉換move_date
為可以決議的內容。這進行了兩次替換,首先它用“/”替換了前兩個“.”,然后對其進行替換以擺脫最后一個“.”。最后,它決議為可以與比較運算子一起使用的日期。
在 c# 方面,您應該將用戶輸入的值轉換為日期,然后將其作為引數:
SELECT *
FROM table
where @searchDate < DateValue(Replace(Replace(move_date, ".", "/", 1, 2), ".", "")) ;
uj5u.com熱心網友回復:
我想這對我現在有用。我用各種例子進行了測驗,似乎找不到這不起作用的例子。
SELECT *
FROM table
WHERE DateValue(Replace(Replace(\"{searchDate}\", \'.\', \'/\', 1, 2), \'.\', \'\')) <
DateValue(Replace(Replace(move_date, \'.\', \'/\', 1, 2), \'.\', \'\'))
searchDate
是字串(迄今為止尚未決議)
如果有人能找到這不起作用的例子,請分享。
uj5u.com熱心網友回復:
在查詢中,將那些糟糕的文本日期轉換為真正的日期值:
SELECT
*,
DateSerial(Mid(move_date, 7, 4), Mid(move_date, 4, 2), Mid(move_date, 1, 2)) As true_move_date
FROM
table
現在,在您的代碼中,將其稱為帶有搜索日期引數的查詢,并使用您的條件展開查詢。這個引數應該被傳遞一個正常的DateTime
值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470803.html
標籤:C# 日期 比较 ms-access-2007 数据库
上一篇:日期過后的第二天洗掉行