[英]Match date in a varchar column
我有一个SQL Server表,存储时间如下(在varchar
列中):
08 SEP 2015 09:15:16
08 SEP 2015 09:15:22
08 SEP 2015 09:15:22
08 SEP 2015 09:15:22
08 SEP 2015 09:15:26
08 SEP 2015 09:15:27
08 SEP 2015 09:15:31
我想编写一个查询,该查询可以为我提供特定月份和年份中的所有条目。 例如“ JAN 2016”等。
我正在使用SQL Server。
如果,你是不是能够改变日期的类型,你有,那么你将需要与他们投 format()
函数来格式化日期(MMM YYYY)从2012+
SELECT
FORMAT(CAST(<column> AS DATE), 'MMM yyyy') as dates
FROM table t
您还可以使用datepart()
函数过滤日期
WHERE
DATEPART(MONTH, dates) = 1 and DATEPART(year, dates) = 2015
为了只显示计数,请使用count()
函数
SELECT COUNT(*)
FROM table
WHERE DATEPART(MONTH, dates) = 1 AND
DATEPART(year, dates) = 2015
正如评论中已经提到的,我建议将此数据类型更改为日期/时间戳字段,以避免在尝试转换字符串时不存在数据不一致的风险和/或使应用程序的一部分崩溃(不尊重格式)日期对象)。
现在, 当且仅当短期内不可行时 ,您可以通过两种方式进行:
1.数据转换:
第一种是提取从表中的所有记录,他们在进行比较之前转换为日期类型,但是如果有至少一个varchar
不是一个良好形成的date
,你的查询将失败。
2.使用字符串:
另一种方法是使用如下所述的varchar
直接查询数据库,以避免这些转换问题:
select * from table_A where date_column like '%JAN 2016%'
但是,使用like
查询有点慢,并且只能用作临时解决方法, 从长远来看,应适应数据模型以简化生活,并拥有更稳定/更可靠的应用程序 。
最后但并非最不重要的一点是,尝试运行一些查询以检查数据库中是否尚未插入一些错误的数据(格式或不是日期的字符串)。 您可能已经面临一些数据不一致问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.