SQL Server和Oracle中获取当前日期的兼容语法

SQL Server和Oracle中获取当前日期的兼容语法,sql,sql-server,oracle,date,Sql,Sql Server,Oracle,Date,如何编写以下内容,使其同时适用于SQL Server和Oracle(也就是说,无需注释或取消注释,具体取决于环境): 我需要将请求的日期与今天的日期(没有时间)进行比较。在oracle中创建函数getDate: create or replace function getDate return date is l_sysdate date; begin select sysdate into l_sysdate from dual; return l_sysd

如何编写以下内容,使其同时适用于SQL Server和Oracle(也就是说,无需注释或取消注释,具体取决于环境):


我需要将请求的日期与今天的日期(没有时间)进行比较。

在oracle中创建函数getDate:

create or replace function getDate
return date is

  l_sysdate date;

begin

  select sysdate
    into l_sysdate
    from dual;

  return l_sysdate;

end;
/

您可以这样使用它:
从dual中选择getdate()

我不确定这是否可行,但我也不明白它的必要性。这两个数据库都支持存储过程,您可以使用其相关语法轻松地在每个数据库上创建一个存储过程,并从任何客户端以相同的方式执行它们。我希望WHERE子句中包含一些IFF语法(或其他),这样我就可以在我不想以任何方式自定义的数据库上执行请求,或者我只是没有扩展权限。不可能,因为两者都有不同的方式,可能使用复杂的技术工作,如先检查当前RDBMSAFAIK的存储过程。不可能,解决方法可能是在每个数据库上创建一个视图,应用专有语法应用过滤器,然后,您的通用sql语句可以简单地调用视图。或者,如果您需要@ZoharPeled建议的过滤器更具灵活性,请使用相同的名称和参数在每个数据库上创建一个过程,然后调用它。您使用什么API与数据库交互(即ODBC/JDBC/等)?大多数API至少支持ODBC转义序列和ODBC标量函数,如
{fn now()}
。ODBC/JDBC/任何驱动程序都会将其转换为特定于数据库的语法--
sysdate
在Oracle中,getDate在SQL Server中,等等。不需要select或局部变量。您可以将函数体缩减为
return sysdate
create or replace function getDate
return date is

  l_sysdate date;

begin

  select sysdate
    into l_sysdate
    from dual;

  return l_sysdate;

end;
/