如何在不使用 CURDATE、MONTH、YEAR 等 DATE 函数的情况下从 RDBMS 获取当月记录
How to get current month records from RDBMS without using DATE functions like CURDATE,MONTH,YEAR
我想为 mysql nad sqlite3 编写 sql 兼容性查询。
在 mysql 我写了一个查询来获取当月记录作为
so_date 是日期字段(YYYY-MM-DD)
select so_no,so_date from so_master where MONTH(CURDATE()) = MONTH(so_date) AND YEAR(CURDATE()) = YEAR(so_date);
这在 sqlite3 中不起作用。
在 sqlite 我可以这样写
select so_no,so_date from so_master where strftime('%Y-%m', so_date) = strftime('%Y-%m', 'now');
但是如果我将数据库更改为 mysql 到 sqlite3 或 sqlite3 到 mysql
我的应用程序将无法工作
所以我希望我的查询通过一个查询在两个数据库中都有效。
如果您将日期视为字符串,使用 SUBSTR()
和 CURRENT_DATE
函数,这在 MySql 和 SQLite 中都很常见:
SELECT so_no, so_date
FROM so_master
WHERE SUBSTR(so_date, 6, 2) = SUBSTR(CURRENT_DATE, 6, 2)
AND SUBSTR(so_date, 1, 4) = SUBSTR(CURRENT_DATE, 1, 4);
或者,更简单:
SELECT so_no, so_date
FROM so_master
WHERE SUBSTR(so_date, 1, 7) = SUBSTR(CURRENT_DATE, 1, 7);
演示 for SQLite and for MySql.
我想为 mysql nad sqlite3 编写 sql 兼容性查询。 在 mysql 我写了一个查询来获取当月记录作为
so_date 是日期字段(YYYY-MM-DD)
select so_no,so_date from so_master where MONTH(CURDATE()) = MONTH(so_date) AND YEAR(CURDATE()) = YEAR(so_date);
这在 sqlite3 中不起作用。 在 sqlite 我可以这样写
select so_no,so_date from so_master where strftime('%Y-%m', so_date) = strftime('%Y-%m', 'now');
但是如果我将数据库更改为 mysql 到 sqlite3 或 sqlite3 到 mysql
我的应用程序将无法工作所以我希望我的查询通过一个查询在两个数据库中都有效。
如果您将日期视为字符串,使用 SUBSTR()
和 CURRENT_DATE
函数,这在 MySql 和 SQLite 中都很常见:
SELECT so_no, so_date
FROM so_master
WHERE SUBSTR(so_date, 6, 2) = SUBSTR(CURRENT_DATE, 6, 2)
AND SUBSTR(so_date, 1, 4) = SUBSTR(CURRENT_DATE, 1, 4);
或者,更简单:
SELECT so_no, so_date
FROM so_master
WHERE SUBSTR(so_date, 1, 7) = SUBSTR(CURRENT_DATE, 1, 7);
演示 for SQLite and for MySql.