【问题标题】:create a formula to convert 1 varchar field w/date and 1 varchar w/time into 1 datetime field创建一个公式将 1 个带日期的 varchar 字段和 1 个带时间的 varchar 字段转换为 1 个日期时间字段
【发布时间】:2018-04-30 22:24:43
【问题描述】:

我有一个包含 2 个varchar 字段的现有报告。 1 代表日期,2 代表时间。我需要创建一个连接两者的公式,然后使用该公式对报告进行排序。示例:

SCHEDULED_DATE             SCHEDULED_TIME
2018-04-26 00:00:00.000    1:00 PM
2018-04-26 00:00:00.000    NULL

我想将 2 个字段加在一起然后排序。 在 SQL 中我可以执行以下操作,但在水晶报表中,它无法正确转换并引发错误。

ORDER BY Convert(Datetime, SCHEDULED_DATE + Convert(time,ISNULL(SCHEDULED_TIME, '00:00:00.000')))

这是我对水晶报表公式的尝试:

If IsNull ({Inspections.SCHEDULED_TIME})
Then CDateTime(CDATE({Inspections.SCHEDULED_DATE}) + Time('00:00:00.000'))
Else CDateTime(CDate({Inspections.SCHEDULED_DATE})+ CTime({Inspections.SCHEDULED_TIME}))

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 你能发布错误吗?
  • 错误:错误的时间格式字符串。详细信息:errorKind 公式错误。
  • 我正在尝试的新公式:
  • If IsNull ({Inspections.SCHEDULED_TIME}) Then {Inspections.SCHEDULED_DATE}+ CTime(00,00,00) 否则 {Inspections.SCHEDULED_DATE}+ CTime({Inspections.SCHEDULED_TIME})
  • 新公式有效吗?

标签: crystal-reports


【解决方案1】:

首先,日期和时间值不应该存储为文本。
最好使用 DBMS 的适当数据类型。

然后在您的公式中查看多个问题:

  • CDateCDateTime 不支持毫秒
  • DateTime 值不能与 + 连接
  • SCHEDULED_DATE-column 已经包含一个时间部分,您(尝试)再添加一个
  • 连接日期和时间部分时,用空格隔开

因此,您必须删除时间部分并连接列而不将它们转换为DateTime

If IsNull ({Inspections.SCHEDULED_TIME})
Then CDateTime(CDATE({Inspections.SCHEDULED_DATE}))
Else CDateTime(Left({Inspections.SCHEDULED_DATE},10)+" "+{Inspections.SCHEDULED_TIME})

注意:我完全删除了“True”部分中的时间00:00:00.000,因为无论如何将所有设置为零时都不需要。

【讨论】:

  • 我们没有创建软件,因此我们无法控制数据库结构或数据类型定义。我应该提到这一点,并且我正在更新系统中的罐头报告。事实证明,时间字段允许输入 Day、AM、PM、Any 等文本。这些值使转换时间过长。我更新了 .dat 文件以使用 12:00:00 更新临时表(对于 Nulls 和 Empty Spaces 也是如此)。现在所有记录都有一个可以通过公式字段排序的时间。感谢您的指导。
猜你喜欢
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
相关资源
最近更新 更多