【问题标题】:To function or not to function, that is the question at hand发挥还是不发挥作用,这是眼前的问题
【发布时间】:2011-02-09 21:57:20
【问题描述】:

我正在为 ASP.NET 应用程序编写一些 SQL 语句。需要做的一件事是仅在开放期间显示信息。供应商软件会在上一个期间关闭时自动更新该期间。所以我发现自己做了一堆子选择,比如:

where date >= (SELECT DATE(CONCAT('20', CONCAT(YY, CONCAT('-', CONCAT( MM, (CONCAT('-', DD))))))) FROM LIB/FILE') 

是的,日期的每个部分都在单独的字段中。

使这个查询成为一个函数会使查询更有效率吗?我之前从未创建过函数,我该怎么做?我的想法是:

IsInRange(date)

所以我可以WHERE IsInRange(date)

或者有没有更好的方法?

【问题讨论】:

  • sql 是 MSSQL 还是 DB2?因为 ibm-i 标签...
  • 它是 DB2/400... 或者 IBM 现在所称的任何东西。
  • 你可以这样称呼它 where date >= RangeDate(YY,MM,DD)
  • 好吧,我不是 DB2 sql 人...对不起...

标签: sql-function ibm-midrange db2-400


【解决方案1】:
CREATE FUNCTION toDate(yy CHAR(2), mm CHAR(2), dd CHAR(2))
RETURNS DATE
RETURN DATE('20' || '-' || yy || '-' || mm || '-' || dd)

SELECT *
FROM table
WHERE date <= toDate(yy, mm, dd)

【讨论】:

  • 其实应该是where date &gt;= (SELECT toDate(yy, mm, dd) FROM LIB/FILE) 我想用一个函数去掉另一个select。
【解决方案2】:

是的,但函数的重点是代码重用。如果您在其他地方这样做,或者预期会这样做,那就去做吧。

【讨论】:

  • 我会在整个应用程序的许多查询中使用它。我将如何创建它?
【解决方案3】:

现在我创建了一个视图来将字段连接到一个日期中,这至少清理了一堆查询。

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多