我有一个字符串字段,其中日期有时输入为YYYY-MM-DD,并将其作为日期显示在Crystal Report上。我正在使用
DateValue ({Table.Field})
显示日期,然后将日期格式设置为MM / DD / YYYY。看起来很好,直到我看到1931年12月12日的日期,并且看到它与数据库中的内容不匹配:“0010-12-31”。
我知道这只是一个错字,我可以看到日期可能应该是12/31/2010,但我想显示他们输入的内容。所以,就在这个时候,我提出了以下内容:
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(和更好)选项?
答案 0 :(得分:0)
您可以创建两个公式:一个是日期,另一个是字符串。显示“新”日期的日期版本和“旧”日期的字符串1。字符串1将根据需要连接值。
// {@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)