簡體   English   中英

如何 Select SQL 服務器記錄基於自定義格式日期列中的特定月份

[英]How To Select SQL Server Records Based On A Specific Month From Custom-Formated-Date Column

我正在使用 SQL Server 2008,我想在我的 Windows 表單應用程序的目標數據庫表的日期字段中顯示一些基於特定月份的記錄。 我為我的日期字段使用了自定義格式(dd-MM-yyyy) ,並且在將記錄插入數據庫時存儲日期的數據類型是nvarchar

這是我的數據庫表的樣子:

PaymentID    PaymentAmount       Date          Comments
      1        30000             27-05-2020    Some Comments
      2        45000             22-06-2020    Some Comments
      3        65000             29-06-2020    Some Comments
      4        33000             30-07-2020    Some Comments
      5        22000             30-07-2020    Some Comments

對於記錄選擇,我已經過了特定月份,比如June ,我想檢查是否有任何付款記錄保存在 2020 年 6 月。我想在數據網格視圖中顯示此記錄。

有沒有辦法從nvarchar日期格式中獲取所需的月份? 任何幫助將不勝感激。

不要將日期存儲為字符串:出於多種原因,這是一種不好的做法。 立即想到效率和數據完整性。 您的第一個努力應該 go 將您的列轉換為date類型。 這樣的事情應該有效:

update mytable set [date] = try_convert(date, 105);
alter table mytable alter column [date] date;

第一條語句嘗試將每個值轉換為date ,並將結果重新分配給字符串列; SQL 服務器將根據服務器的區域設置轉換回字符串。 無效值被轉換為null s。 然后您可以安全地更改列的數據類型。

然后,您可以像這樣輕松過濾 2020 年 6 月的表格:

select *
from mytable
where [date] >= '20200701' and [date] < '20200801'

如果您堅持使用當前的字符串數據類型,並且由於某種原因無法更改它,那么您可以使用字符串函數。 對於您當前的格式,我建議:

where [date] like '%-07-2020'

你是如此接近。 month() function 需要一個 integer。datename() function 將使用一個字符串。 看看這個;

https://sqlhints.com/2015/06/07/how-to-get-month-name-from-date-in-sql-server/

由於您的數據類型是 nvarchar,因此您需要在 select 中使用 substr() function 來解析月份和年份。 如果您想使用數值進行搜索,則需要將子字符串轉換為 int 否則您可以將子字符串與字符串值進行比較,例如

cast(substr(date, 4, 2)) = 7

要么

substr(date, 4, 2) = '07'

但實際上,如果您有選擇權,正如 Dan 所說,您應該將日期列的數據類型更改為日期。 SQL 服務器有很多處理日期的有用功能,如果您的日期在 nvarchar 中,您將無法真正利用這些功能

暫無
暫無

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

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