使用 LIKE 关键字获取当前月份记录



我尝试使用SQL Server LIKE选择当前月份的数据,但它没有得到任何结果。当我在SQL中运行相同的代码时,它会得到原始结果。我的查询错误是什么?我想在 SQL Server 中运行此查询。

SELECT EnrolledID, Date, Time 
FROM dbo.view_attendance
WHERE Date LIKE '2019-08%'
ORDER BY Date,Time;

SQL Server 数据库中的日期日期类似于该2019-08-14 00:00:00.000

即使您要求LIKE,我还是建议您使用以下格式:

SELECT [EnrolledID]
, [Date]
, [Time]
FROM dbo.view_attendance 
WHERE [Date] >= '20190801' and [Date] < '20190901'
ORDER BY [Date], [Time];

尽管在DATETIME列上使用LIKE的情况下没有语法错误,但我建议仅在尝试解析STRING值以搜索特定模式时使用LIKE

LIKE不适用于DATETIME列,也不会返回结果。如果您的列类型为DATETIME,那么我建议使用上述方法。

MySql在表达式中对数据类型进行隐式转换,如下所示:

Date LIKE '2019-08%'

因此,MySqlDate转换为varchar,并且表达式返回有效结果,因为两个操作数都被视为varchars。
您可以在此处找到更多信息:https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html

SQL Server执行此操作,因此必须显式执行转换或使用如下函数:

WHERE FORMAT(Date, 'yyyy-MM') = '2019-08' 

如果 [Date] 列是 DateTime Type,请尝试以下操作:

declare @currentMonth int = datepart(MONTH,GETDATE())
declare @currentYear int = datepart(YEAR,GETDATE())
SELECT [EnrolledID]
, [Date]
, [Time]
FROM dbo.view_attendance 
WHERE DATEPART(year,[Date]) = @currentYear And DATEPART(MONTH,[Date]) = @currentMonth
ORDER BY [Date], [Time];

或者这个:

SELECT [EnrolledID]
, [Date]
, [Time]
FROM dbo.view_attendance 
WHERE DATEPART(year,[Date]) = datepart(YEAR,GETDATE()) And DATEPART(MONTH,[Date]) =  datepart(MONTH,GETDATE())
ORDER BY [Date], [Time];

最新更新