sql - 将十进制值转换为日期 - Informix DB

标签 sql date decimal informix

我正在尝试在 select 语句中将十进制值转换为日期

SELECT user_id, extend(dbinfo("UTC_TO_DATETIME",min(creationdate)), year to fraction) AS earned_date FROM 消息

但是我收到了这个错误

 Value exceeds limit of INTEGER precision

表中的字段定义是这样的

  creationDate      decimal(14,0) NOT NULL

看来我没有使用正确的方式进行转换,知道吗?

最佳答案

我认为您不需要在此上下文中使用 EXTEND - EXTEND 用于更改 DATETIME 和 INTERVAL 值的比例。

UTC_TO_DATETIME returns a DATETIME已经值了。

你试过吗:

SELECT user_id, dbinfo("UTC_TO_DATETIME",min(creationdate)) AS earned_date
  FROM message

那会产生什么?

更新

啊,举个例子吧!

您传递的值不是 UTC_TO_DATETIME 预期的 UTC 日期时间。该函数需要一个表示秒而不是毫秒的整数。就这么简单。

DBINFO('UTC_TO_DATETIME', 1329994172574) 超出整数精度。

DBINFO('UTC_TO_DATETIME', 1329994172574/1000) 另一方面,产生:

2012-02-23 21:49:32,我想这正是您所期望的?

如果您查看我之前提供的链接,它会解释小数秒的处理方式。 (剧透:它们被忽略了。)

如果小数秒非常重要,我猜你将不得不EXTEND此函数的结果为小数秒,然后将 MOD(creationdate,1000)/1000 添加到它.

例如:

SELECT user_id, 
      (dbinfo("UTC_TO_DATETIME", MIN(creationdate)/1000 )::DATETIME YEAR TO FRACTION(3)
        + (MOD(MIN(creationdate),1000)/1000) UNITS FRACTION) AS earned_date
  FROM message

(但就个人而言,无论如何我都倾向于将这个逻辑放入 SPL 中,因此您可以这样调用它: SELECT user_id, millis_to_time(MIN(creationdate))... 并避免到处写这种复杂的算法。)

关于sql - 将十进制值转换为日期 - Informix DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11865083/

相关文章:

mysql - 比较 MYSQL 中不同数据类型的日期

android - 使用 ContentResolver 选择 SQLite DB 中两个日期之间的数据?

c# - 有小数金额,如果存在,要修剪到 2 位小数

c++ - 将十进制值转换为具有相同可见表示的十六进制值

sql - 为什么 FETCH FIRST N ROWS 不能与 WITH 语句结合使用?

mysql - 如何在 MySql 中获取 CHAR 列的数字签名

mysql - 如何修复 "1054 - unknown column on clause"

mysql - 如何将当前周过滤为日期范围

sql - 数据仓库模型方法

c# - 将 double 转换为 decimal 还是从 double 构造 "new"decimal 更好?