c++ - 为日期查找维度表填充加载文件的最佳方法是什么?

标签 c++ sql date sed informix

Informix 11.70.TC4:

我有一个 SQL 维度表,用于查找日期 (pk_date) 并根据用户选择的是“1”、“2”还是返回另一个日期(plus1、plus2 或 plus3_months)给客户端一个“3”。

表架构如下:

TABLE date_lookup
(
    pk_date DATE,
    plus1_months DATE,
    plus2_months DATE,
    plus3_months DATE
);

UNIQUE INDEX on date_lookup(pk_date);

我有一个包含从 01-28-2012 到 03-31-2014 的日期的加载文件(竖线分隔)。

加载文件示例如下:

01-28-2012|02-28-2012|03-28-2012|04-28-2012|
01-29-2012|02-29-2012|03-29-2012|04-29-2012|
01-30-2012|02-29-2012|03-30-2012|04-30-2012|
01-31-2012|02-29-2012|03-31-2012|04-30-2012|
...
03-31-2014|04-30-2014|05-31-2014|06-30-2014|

................................................ ...................................................

编辑: Jonathan 爵士在 11.70.TC5 上使用 DATE(pk_date + n UNITS MONTH 的 SQL 语句成功了!

enter image description here

我生成了一个加载文件,其中 pk_date 从 01-28-2012 到 12-31-2020,plus1、plus2 和 plus3_months 为空。将其加载到 date_lookup 表中,然后执行下面的更新语句:

UPDATE date_lookup
   SET plus1_months = DATE(pk_date + 1 UNITS MONTH),
       plus2_months = DATE(pk_date + 2 UNITS MONTH),
       plus3_months = DATE(pk_date + 3 UNITS MONTH);

显然,DATE() 能够将 pk_date 转换为 DATETIME,使用 TC5 的新算法进行数学运算,并以 DATE 格式返回结果!

................................................ ...........................................................

这个维度表的规则是:

  • 如果 pk_date 在其月份中有 31 天,而 plus1、plus2 或 plus3_months 只有 28、29 或 30 天,则令 plus1、plus2 或 plus3 等于该月的最后一天。
  • 如果 pk_date 在其月中有 30 天,而 plus1、plus2 或 plus3 在其月中有 28 或 29 天,则让它们等于该月的最后有效日期,依此类推。
  • 所有其他日期都在下个月的同一天。

我的问题是:按照上述规则自动生成 03-31-2014 之后的 pk_dates 的最佳方法是什么?我可以使用 SQL 脚本“sed”C 程序完成此操作吗?

编辑:我提到 sed 是因为我已经有超过两年的数据值(value)并且 也许可以根据这些数据对其余部分进行建模,或者像 awk 这样的工具更好?

最佳答案

最好的技术是升级到 11.70.TC5(在 32 位 Windows 上;通常是 11.70.xC5 或更高版本)并使用如下表达式:

SELECT DATE(given_date + n UNITS MONTH)
  FROM Wherever
...

DATETIME 代码在 11.70.xC4 和 11.70.xC5 之间进行了修改,以根据您在日期描述时概述的规则生成日期,并且您使用 + n UNITS MONTH 或等效符号。

这完全不需要表格。不过,很明显,您的所有客户端也必须在 11.70.xC5 上。

也许您可以将您的开发机器更新到 11.70.xC5,然后使用此属性为您的开发机器上的表生成数据,并将数据分发给您的客户端。

如果至少将某人升级到 11.70.xC5 不是一个选项,请考虑 Perl 脚本建议。

关于c++ - 为日期查找维度表填充加载文件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11497714/

相关文章:

bash - date命令可以宏化吗

c++ - basic_string.tcc 中的核心转储 - 优化了

c++ - 如何在 popen 函数 C++ 中插入计时器?

c++ - 冒泡排序优化 C++

sql - 比较内部联接和外部联接SQL语句

MYSQL 项目事务

android - 在 Android 中将 int 转换为日期格式 dd/MM/yyyy

c++ - 如何创建可变参数泛型 lambda?

mysql - 如何在Mysql中使用if条件

php - 使用sql按家庭搜索表