繁体   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