大家好
编写与mysql,oracle和mssql兼容的SQL语句的最佳方法是什么
数据库。
例如,当我尝试执行此操作时:
INSERT INTO "table_name ("date") VALUES (to_date('2011-02-11 16:48:08','yyyy-mm-dd hh24:mi:ss'));
它在oracle中工作,但是这个查询会给出错误:当我尝试在MYSQL数据库中执行它时,to_date不存在。
但是这个下面的SQL适用于mysql而不能在oracle中工作:
INSERT INTO t_sys_log (date) VALUES ('2011-11-11');
那么请你帮我解决mysql和oracle中的日期问题兼容性,并告诉我是否有办法让标准SQL语句在rracle,mssql和mysql中运行? 谢谢
答案 0 :(得分:2)
是的,to_date将不可用于两个数据库,因为它是仅由Oracle提供的SQL扩展。
你越深入就越具挑战性。日期与Timestamp并不完全相同,所以你会发现自己陷入了某些数据库中的时间戳和其他数据库中的日期。这是因为有些数据库中Date仅包含日历日期,而不包含任何关联的小时,分钟和秒。
MSSQL日期也受平台时区规则的约束,而其他数据库不以相同方式保留受时区规则约束的日期。
最后,如果你真的希望它能够正常工作,你需要编写一个软件层,将日期转换为底层数据库所需的格式,放弃“一个SQL语句来完成所有日期”。 / p>
答案 1 :(得分:2)
尝试ANSI标准DATE文字
INSERT INTO t_sys_log(date)VALUES( date' 2011-12-31');
答案 2 :(得分:0)
我遇到了同样的问题。不幸的是,我找不到一个好办法。相反,我创建了一个可插入的“帮助器”类(这是Java中的),它与数据库驱动程序一起设置。它具有创建特定于DBMS的SQL语句部分的方法。