从 DevExpress 中计算日期差异
Computing date difference from within DevExpress
我们使用使用 DevExpress 构建报告的第三方软件。通常在 Oracle 上——我可以通过简单地减去它们来轻松地得到日期的差异:
TRUNC(sysdate) - TRUNC(a.birth_date) AS datediff
我在 DevExpress 中使用了相同的逻辑:
CAST(CAST(CURRENT_DATE AS VARCHAR(9)) AS DATE) - CAST(CAST(a.birth_date AS VARCHAR(9)) AS DATE) AS datediff
但是这样做会给我这个错误信息:
Invalid cast from 'Decimal' to 'DateTime'. Couldn't store <35> in DATEDIFF Column.
Expected type is DateTime.
我该如何解决这个问题?
备注:
- 这里进行了很多转换,但这只是一种解决方法,因为
TRUNC
不起作用,所以我基本上只是转换为 VARCHAR
,基本上删除了时间部分和将其转换回 DATE
字段。
CURRENT_DATE
相当于 DevExpress 世界中的 SYSDATE
。
看起来最简单的解决方案是将结果转换为 decimal
。
CAST(CAST(CAST(CURRENT_DATE AS VARCHAR(9)) AS DATE) - CAST(CAST(a.birth_date AS VARCHAR(9)) AS DATE) AS DECIMAL) AS datediff
我们使用使用 DevExpress 构建报告的第三方软件。通常在 Oracle 上——我可以通过简单地减去它们来轻松地得到日期的差异:
TRUNC(sysdate) - TRUNC(a.birth_date) AS datediff
我在 DevExpress 中使用了相同的逻辑:
CAST(CAST(CURRENT_DATE AS VARCHAR(9)) AS DATE) - CAST(CAST(a.birth_date AS VARCHAR(9)) AS DATE) AS datediff
但是这样做会给我这个错误信息:
Invalid cast from 'Decimal' to 'DateTime'. Couldn't store <35> in DATEDIFF Column.
Expected type is DateTime.
我该如何解决这个问题?
备注:
- 这里进行了很多转换,但这只是一种解决方法,因为
TRUNC
不起作用,所以我基本上只是转换为VARCHAR
,基本上删除了时间部分和将其转换回DATE
字段。 CURRENT_DATE
相当于 DevExpress 世界中的SYSDATE
。
看起来最简单的解决方案是将结果转换为 decimal
。
CAST(CAST(CAST(CURRENT_DATE AS VARCHAR(9)) AS DATE) - CAST(CAST(a.birth_date AS VARCHAR(9)) AS DATE) AS DECIMAL) AS datediff