创建一个公式以将 1 个 varchar 字段 w/date 和 1 个 varchar w/time 转换为 1 个日期时间字段
create a formula to convert 1 varchar field w/date and 1 varchar w/time into 1 datetime field
我有一个包含 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 中,我可以执行以下操作,但在 crystal 报告中,它无法正确转换并引发错误。
ORDER BY Convert(Datetime, SCHEDULED_DATE + Convert(time,ISNULL(SCHEDULED_TIME, '00:00:00.000')))
这是我对 Crystal 报告公式的尝试:
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}))
如有任何帮助,我们将不胜感激。
谢谢
首先,日期和时间值永远不应存储为文本。
最好使用 DBMS 的适当数据类型。
然后在你的公式中看到多个问题:
CDate
和CDateTime
不支持毫秒
Date
和 Time
值不能与 +
连接
SCHEDULED_DATE
列已经包含一个时间部分,您(尝试)再添加一个
- 连接日期和时间部分时,用空格分隔 space
因此,您必须删除时间部分并连接列而不将它们转换为 Date
或 Time
:
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
,因为当您将所有设置为零时不需要它。
我有一个包含 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 中,我可以执行以下操作,但在 crystal 报告中,它无法正确转换并引发错误。
ORDER BY Convert(Datetime, SCHEDULED_DATE + Convert(time,ISNULL(SCHEDULED_TIME, '00:00:00.000')))
这是我对 Crystal 报告公式的尝试:
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}))
如有任何帮助,我们将不胜感激。 谢谢
首先,日期和时间值永远不应存储为文本。
最好使用 DBMS 的适当数据类型。
然后在你的公式中看到多个问题:
CDate
和CDateTime
不支持毫秒Date
和Time
值不能与+
连接
SCHEDULED_DATE
列已经包含一个时间部分,您(尝试)再添加一个- 连接日期和时间部分时,用空格分隔 space
因此,您必须删除时间部分并连接列而不将它们转换为 Date
或 Time
:
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
,因为当您将所有设置为零时不需要它。