sql - 如何从自定义格式的日期列中选择基于特定月份的 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
日期格式中获取所需的月份?任何帮助将不胜感激。
解决方案
不要将日期存储为字符串!这是一种不好的做法,原因有很多:立即想到效率和数据完整性。您应该首先将列转换为date
日期类型。像这样的东西应该工作:
update mytable set [date] = try_convert(date, 105);
alter table mytable alter column [date] date;
第一条语句尝试将每个值转换为 a date
,并将结果重新分配给字符串列;SQL Server 将根据服务器的区域设置转换回字符串。无效值转为null
s。然后,您可以安全地更改列的数据类型。
然后,您可以像这样轻松过滤 2020 年 6 月的表格:
select *
from mytable
where [date] >= '20200701' and [date] < '20200801'
如果您坚持使用当前的字符串数据类型,并且由于某种原因无法更改它,那么您可以使用字符串函数。对于您当前的格式,我建议:
where [date] like '%-07-2020'
推荐阅读
- python - 如何确保良好的、不同的初始 NumPy MT19937 状态?
- python - 在NN训练期间最大化一种损失并最小化另一种损失的正确方法是什么?
- sql - 使用 SQL 在所有期间复制输出行
- ios - OAuthSwift SceneDelegate.swift 问题 ObjC+Swift 项目
- c++ - 使用分离的 src- 和 test- 文件夹运行 googletest
- android-studio - 当两个int值在android studio中相等时如何禁用按钮
- arrays - 如何从 BigQuery 中的 JSON 字符串中提取数组
- vb.net - 对 whenCreated 的 DirectorySearcher 查询运行速度非常慢
- c# - NLog.Targets.DebugTarget 类是如何工作的?
- angular - Angular 组件中的 ReCaptcha Enterprise 在加载或重置时显示控制台错误