我尝试使用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%'
因此,MySql将Date
转换为varchar
,并且表达式返回有效结果,因为两个操作数都被视为varchar
s。
您可以在此处找到更多信息: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];