Crystal reports 返回不同的数据类型水晶公式

Crystal reports 返回不同的数据类型水晶公式,crystal-reports,crystal-reports-2008,Crystal Reports,Crystal Reports 2008,我有一个要求,根据选择的参数,表格字段应显示为文本或日期。例如,如果用户选择true,则datetime类型的OriginDate字段应在报告中显示为日期,否则应显示为文本。我尝试创建一个公式,并执行如下操作,然后将公式放在报告的详细信息部分,但由于返回的数据类型不同,因此无法工作 if {?Mailmerge}=true then ToText({Travel.OriginDatetime}, "M/d/yy") else {Travel.OriginDatetime} 是否有一种方法可以满

我有一个要求,根据选择的参数,表格字段应显示为文本或日期。例如,如果用户选择true,则datetime类型的OriginDate字段应在报告中显示为日期,否则应显示为文本。我尝试创建一个公式,并执行如下操作,然后将公式放在报告的详细信息部分,但由于返回的数据类型不同,因此无法工作

if {?Mailmerge}=true then
ToText({Travel.OriginDatetime}, "M/d/yy")
else
{Travel.OriginDatetime}

是否有一种方法可以满足上述要求,这样我就不会创建两个报告,一个字段显示为文本,另一个字段显示为日期?

如果我跟踪您,您只想在
为真时显示
m/d/yy
?否则您想显示完整日期

不能在同一公式中显示不同的数据类型,因此只需将条件语句的两部分转换为字符串即可:

if {?Mailmerge}=true then
ToText({Travel.OriginDatetime}, "M/d/yy")  // 8/30/12
else
ToText({Travel.OriginDatetime}, "M/d/yy hh:mm:ss")  // 8/30/12 02:06:00

我不知道你的日期在数据库中到底是什么样子的,但是你可以使用上面的内容作为根据
?MailMerge
参数格式化日期的指南。

如果我跟踪你,你只想在
?MailMerge
为真时显示
m/d/yy
,否则你想显示完整的日期吗

不能在同一公式中显示不同的数据类型,因此只需将条件语句的两部分转换为字符串即可:

if {?Mailmerge}=true then
ToText({Travel.OriginDatetime}, "M/d/yy")  // 8/30/12
else
ToText({Travel.OriginDatetime}, "M/d/yy hh:mm:ss")  // 8/30/12 02:06:00


我不知道你的日期在数据库中到底是什么样子的,但是你可以使用上面的指导原则,根据
?MailMerge
参数格式化你的日期。

尝试创建一个公式,将你的字段返回为字符串
totext({Travel.OriginDateTime},“M/d/yy”)
,并将其与原始字段重叠
{Travel.OriginDateTime}
并基于
{MailMerge}
的值有条件地抑制它们,以便在报表的任何一个实例中只显示一个。

尝试创建一个公式,以字符串形式返回字段
totext({Travel.OriginDateTime},“M/d/yy”)
,并将其覆盖到原始字段
{Travel.OriginDateTime}
并基于
{?MailMerge}的值有条件地抑制它们
这样,在报表的任何一个实例中都只显示一个日期。

日期以文本形式显示;您想说明什么?不,上述操作不起作用,因为Travel.OriginDatetime是数据库中的一个数据类型为datetime的字段。因此,当我尝试保存公式时,会出现一个错误,表示旅行需要字符串。或者IGINDATIME行。我在上面添加它是为了让大家了解我想附带的内容。对不起,我还是不明白。如果它们在数据库中存储为日期,那么将日期显示为字符串有什么意义?您是否尝试以不同的格式设置日期?好的,我会解释。基本上,如果该字段显示为日期,则当报告是移植到excel并用于mailmerge,它显示datetime。因此,我试图做的是,如果mailmerge参数选择为false,则OriginDatetime字段将按其在数据库中的方式显示。但当mailmerge选择为True时,它将显示字段的日期部分,但显示为字符串。因此,在导出o excel仅显示日期,不向其添加时间戳。基本上,对于导出到excel时在crystal中格式化为日期的datetime字段,它将变为datetime,而不仅仅是日期。因此,如果将其转换为文本并显示,它将不会向其添加时间戳。日期以文本形式显示;您想说明什么h?不,上面的不起作用,因为Travel.OriginDatetime是数据库中的一个数据类型为datetime的字段。因此,当我尝试保存公式时,会出现一个错误,表示Travel.OriginDatetime行需要一个字符串。我在上面添加它是为了让您了解我试图附带的内容。对不起,我仍然不明白。如果它们被存储作为数据库中的日期,将日期显示为字符串有什么意义?您是否尝试以不同的格式设置日期?好的,我将进行解释。基本上,如果字段显示为日期,当报表导出到excel并用于mailmerge时,它将显示datetime。因此,如果mailmerge参数选择为false,我将尝试执行以下操作:inDatetime字段在数据库中的显示方式相同。但当选择Mailmerge为True时,它会显示字段的日期部分,但显示为字符串。因此,当导出到excel后在Mailmerge中使用它时,它只显示日期,而不向其添加时间戳。基本上,对于导出时在crystal中格式化为日期的datetime字段ed to excel变成datetime,而不仅仅是date。因此,如果将其转换为文本,然后显示,则不会向其添加时间戳。上述操作会将两者转换为文本。我只想在Mailmerge为true时将其转换为文本,否则将显示为date字段。我知道我将无法在同一公式中显示不同的数据类型,但是否有其他方法可供选择可以做到这一点吗?是的,当我导出它时,它作为datetime字段导出到excel,即使它在crystal中被格式化为date。我使用LBT-将日期转换为您想要的格式的字符串。这是您的输出的区别,而不是数据类型,对吗?@developer-我不知道该告诉您什么,它导出对我来说很好。我不确定为什么发生了,但它甚至为crystal中的日期格式字段添加了时间戳。因此我考虑将其转换为字符串。因此它不添加时间部分。但同时,报告也应在excel中按日期排序。因此这两个功能都是必需的。因此,我想创建一个参数Mailmerge,当为false时,该参数将显示在cystal中将字段设置为日期。此报告将不用于mailmerge,因此在导出到Crystal时,如果在其中添加时间戳,则可以。上述操作将两者都转换为文本。仅当mailmerge为true时,我想将其转换为文本,否则将显示为日期字段。我知道我将无法