我在我的Ubuntu18.04和PHP 7.2
上使用sqlsrv
模块来运行下面的sql查询
SELECT REPLACE(LTRIM(REPLACE(CardNo, '0', ' ')),' ', '0') AS staff_id,
FORMAT(PunchDatetime, 'yyyy-MM-dd') as 'date',
FORMAT(min(PunchDatetime), 'HH:mm:ss') AS time_in,
IIF(min(PunchDatetime) != max(PunchDatetime), FORMAT(max(PunchDatetime), 'HH:mm:ss'), NULL) AS time_out
FROM PunchRecords
WHERE cast('2018-11-01' as date) = cast(FORMAT(PunchDatetime, 'yyyy-MM-dd') as date)
group by CardNo, FORMAT(PunchDatetime, 'yyyy-MM-dd')
order by CardNo";
在Windows上执行的相同查询从表中返回数据,但在Ubuntu环境中运行时返回空结果集。
任何关于这个问题的反馈都将不胜感激。
发布于 2018-11-07 16:39:55
最明显的原因可能是Ubuntu上不同的日期格式。'2018-11-01‘可以解释为YYYY-MM-DD或YYYY-DD-MM。只需检查以下内容:
SET LANGUAGE ENGLISH;
SELECT CAST('2014-09-13' AS DATETIME);
GO
SET LANGUAGE GERMAN;
SELECT CAST('2014-09-13' AS DATETIME);--ERROR: there's no month "13"
GO
在比较日期时,只比较日期-不要将其转换为字符串。只需使用:
WHERE '20181101' = cast(PunchDatetime as date)
https://stackoverflow.com/questions/53185780
复制相似问题