簡體   English   中英

VB.net減去DateTime.Now.ToString的1年

[英]VB.net Minus 1 year from DateTime.Now.ToString

基於我的上一個問題, 用於查詢1年舊時間戳的VB.net SQL語句,用於回顧一年記錄的SQl查詢由於以下錯誤而中途停止: Select Error: ORA-01830: date format picture ends before converting entire input string

因此,我決定對從當前日期開始不超過一年的行執行不同的路由。

為此,我將在VB.net中執行以下SELECT語句:

Dim strSearch As String = "Select timestampVal from table_name WHERE timestampVal > " & minusYear & " order by timestampVal DESC"

對於我的SELECT語句中的minusYear變量,我將首先提取以下當前日期字符串:

Dim sign As String = DateTime.Now.ToString("yyyyMMdd-hhmmss")

但是,要獲得minusYear我需要以某種方式使負sign離負數一年。

我嘗試了Dim minusYear As String = DateTime.Now.AddYears(-1) ; 但是它像這樣格式化MM\\DD\\YYYY HH:MI:SS PM ,因為我需要查詢字符串看起來像yyyyMMdd-hhmmss地方,所以它不起作用。

有沒有辦法從我的符號串中減去-1年? 我嘗試這樣做,但是當然存在數據類型問題,並且不能將字符串轉換為CInt真正起作用。

如果我可以用1年減號來獲得minusYear ,那么我的select語句就可以了[我已經在SQL中對其進行了測試,所以這種方式可以用,我只需要將負sign's減去一年即可]

一些東西:

  • 在.NET中,格式字符串區分大小寫。 您已指定hh ,這是12小時制的小時數。 你可能意味着HH上一個24小時制小時。

  • 使用DateTime.Now.AddYear(-1)減去年份要容易得多,但是請記住, DateTime.Now在服務器的本地時區中。 在許多情況下,這本身就是一個問題。 根據您的資料,您可以考慮使用DateTime.UtcNow ,或者可能使用TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz)轉換為特定的時間段,而不是依賴於服務器的時區設置。

  • 確實,您不應將日期或時間作為varchar存儲在數據庫中。 在oracle中使用TIMESTAMP字段。 您遇到的所有格式問題都源於此。 創建一個新列,遷移數據,更新您的用法,並刪除舊列。

  • 您也不應通過字符串串聯傳遞參數。 這通常會降低性能(防止緩存執行計划),並且有時會使您的代碼容易受到SQL Injection攻擊

  • 如果在.NET端正確傳遞參數 ,而不是將參數嵌入字符串中,則字符串表示格式將變得無關緊要。

  • 除非您需要在應用程序層中進行某些具體說明,否則實際上您根本不應該這樣做。 而是使用數據庫中的函數來計算當前時間,並從中減去一年。 將當前時間作為參數發送到數據庫毫無意義,因為數據庫本身可以做到這一點。

在應用層而不是SQL進行操作是一種代碼嗅覺。 如果可以的話,我會繼續堅持第一個問題(下一個問題)。 但是與此同時,要在VB.NET中進行...

Dim sign As String = DateAdd(DateInterval.Year, -1, Now()).ToString("yyyyMMdd-hhmmss")

暫無
暫無

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

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