crystal-reports - 创建一个公式将 1 个带日期的 varchar 字段和 1 个带时间的 varchar 字段转换为 1 个日期时间字段
问题描述
我有一个包含 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')))
这是我对 Crystal Report 公式的尝试:
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
值不能与 a 连接+
- -column 已经包含一个时间部分,
SCHEDULED_DATE
您(尝试)再添加一个 - 连接日期和时间部分时,用空格隔开
因此,您必须删除时间部分并连接列而不将它们转换为Date
or Time
:
If IsNull ({Inspections.SCHEDULED_TIME})
Then CDateTime(CDATE({Inspections.SCHEDULED_DATE}))
Else CDateTime(Left({Inspections.SCHEDULED_DATE},10)+" "+{Inspections.SCHEDULED_TIME})
注意:我00:00:00.000
完全删除了“True”部分中的时间,因为无论如何将所有设置为零时都不需要它。
推荐阅读
- python - Flask-Security,在蓝图中实现 SECURITY_TRACKABLE 功能
- angular6 - NgRx 存储列表和详细数据对象
- javascript - React Native - 返回上一页时如何刷新 FlatList?
- grafana - Istio 1.0.2 在浏览器上访问 grafana
- javascript - 按特定顺序将 JavaScript 对象分组到数组中
- ios - 如何在装有 Beta iOS 的 iPhone 上运行我的应用程序?
- javascript - 在 android studio 中访问 .xls 文件时出错
- django - Django:表单在索引中有效,但在特定页面中无效
- java - 引用库的类无法解析为类型
- c# - System.Data.SqlClient.SqlException (0x80131904) 在包管理器中执行更新数据库时