首页 > 解决方案 > 如何从自定义格式的日期列中选择基于特定月份的 SQL Server 记录

问题描述

我正在使用 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 月。我想在 datagridview 中显示这条记录。

有没有办法从nvarchar日期格式中获取所需的月份?任何帮助将不胜感激。

标签: sqlsql-serverstringdatetimesql-server-2008

解决方案


不要将日期存储为字符串!这是一种不好的做法,原因有很多:立即想到效率和数据完整性。您应该首先将列转换为date日期类型。像这样的东西应该工作:

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

第一条语句尝试将每个值转换为 a date,并将结果重新分配给字符串列;SQL Server 将根据服务器的区域设置转换回字符串。无效值转为nulls。然后,您可以安全地更改列的数据类型。

然后,您可以像这样轻松过滤 2020 年 6 月的表格:

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

如果您坚持使用当前的字符串数据类型,并且由于某种原因无法更改它,那么您可以使用字符串函数。对于您当前的格式,我建议:

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

推荐阅读