我的朋友问我是否有办法使用1查询来选择日期时间并将其用于任何数据库。
Atm他使用这个查询Oracle:
SELECT vt_sysdate() FROM dual;
我知道双表只适用于Oracle。但他希望对其他数据库使用相同的查询,例如PostgreSQL。
那么,有没有一种方法可以让这个查询在每个数据库上运行(也许可以为每个数据库创建一个双表(。或者,是否有一个查询可以获取在任何数据库上工作的系统日期时间?
谢谢你的帮助。
不,我不这么认为,因为Oracle坚持怪异,而MS SQL似乎根本不支持标准的current_date
。
MySQL接受SELECT current_date;
,不理解VALUES
。
PostgreSQL接受SELECT current_date;
或VALUES
。
MS SQL似乎根本不理解current_date
。
Oracle理解current_date
,但不理解没有FROM
的标量查询。
来自维基百科:
- Firebird有一个单行系统表RDB$DATABASE,它的使用方式与Oracle的DUAL相同,尽管它也有自己的含义
- IBM DB2有一个在使用Oracle Compatibility 1时解析DUAL的视图
- Microsoft Access:可以创建一个名为DUAL的表,并通过ADO 2强制执行单行约束
- MySQL允许在不需要任何表数据的查询中将DUAL指定为表。3
- PostgreSQL:可以添加DUAL视图来简化从Oracle的移植。4
- SQLite:一个名为"dual"的VIEW,其工作原理与Oracle的"dule"表相同,可以创建如下:"CREATE VIEW dual as SELECT'x'as dummy;">
- SAP HANA有一个名为DUMMY的表,其工作原理与Oracle的"双"表相同
您可以尝试current_timestamp而不是current_date,因为这似乎是支持的最佳选项。顺便说一句,如果没有某种翻译层,编写与供应商无关的SQL似乎基本上是不可能的。
感谢大家的支持。
在查看了每个人的答案后,在与我的朋友讨论了一段时间后,我们得出了一个结论,即不可能对所有数据库使用一个查询。所以我们创建一个函数,检查数据库,使用正确的函数来获取时间并返回
我们将不得不在我们使用的任何数据库上创建一个伪表dual,就像本博客中建议的那样。一个包含1列和1条记录的伪表。
谢谢大家。