1

我有一个字符串字段,其中日期有时输入为 YYYY-MM-DD,并在 Crystal Report 上显示为日期。我正在使用

DateValue ({Table.Field})

显示日期,然后将日期格式化为 MM/DD/YYYY。这看起来不错,直到我看到 1931 年 10 月 12 日的日期并且发现它与数据库中的内容不匹配:“0010-12-31”。

我知道这只是一个错字,我可以看到日期可能应该是 2010 年 12 月 31 日,但我想显示他们输入的内容。所以,就在这一次,我输入了以下内容:

if {Table.Field} = '0010-12-31' then
  Date(0010, 12, 31)
else
  DateValue ({Table.Field})

当我这样做时,它显示 12/31/10,即使我已请求 4 位数年份。我想我对此很满意,因为它没有那么具有欺骗性。

但是,Crystal 应该如何处理看似很旧的日期呢?

而且,更重要的是,如果日期以不同的格式输入,这是否会令人窒息?我认为会的。

if NOT (IsNull({Table.Field})) then
  Date(ToNumber (Left ({Table.Field}, 4)),
       ToNumber (Mid ({Table.Field}, 6, 2)),
       ToNumber (Right ({Table.Field}, 2))
      )

这确实是一个问题:

在 1) 错误地显示错误日期或 2) 如果自由格式的字符串日期格式不同时报告窒息,是否有第 3 个(和更好的)选项?

4

1 回答 1

0

您可以创建两个公式:一个是日期,一个是字符串。显示“新”日期的日期版本和“旧”日期的字符串一。字符串 one 将根据需要连接值。

// {@date_version}
DateValue ({Table.Field})

抑制逻辑:CurrentFieldValue<Date(1980,1,1)

// {@stirng_version}
{Table.Field}[6 to 7] + "/" + {Table.Field}[9 to 10] + "/19??"

抑制逻辑:{@date_version}>Date(1980,1,1)

于 2013-02-22T14:01:11.780 回答