Crystal报表日期格式化报错及时间格式转换求助
我来帮你搞定这两个格式转换的问题:
问题1:解决日期转换的“the string is non numeric”错误
你碰到的这个报错,多半是totext生成的字符串里混进了非数字字符,或者格式参数的大小写不符合你用的报表工具要求。试试这些解决办法:
- 先确认
totext的格式参数是否正确:很多报表工具(比如Crystal Reports、FineReport)对日期格式符的大小写很敏感,YYYYMMDD可能得改成yyyyMMdd,同时加上第三个参数去掉默认的分隔符或空格,比如:totext(db.colname, 'yyyyMMdd', '') - 如果确实需要转成数字类型,确保生成的字符串是纯数字后再转换:
tonumber(totext(db.colname, 'yyyyMMdd', '')) - 另外,有些工具支持直接用日期拆分拼接的方式生成数字格式的日期,能避免字符串转数字的坑,比如:
datepart('yyyy', db.colname)*10000 + datepart('MM', db.colname)*100 + datepart('dd', db.colname)
问题2:12小时制字符串转24小时制hh24miss格式
因为你的时间存在字符串列里,得先把它转成时间类型,再重新格式化成24小时制的字符串。具体操作如下:
- 第一步:用时间转换函数识别12小时制的字符串,得指定输入格式(要包含AM/PM标识)。比如假设你的时间字符串是
hh:mm:ss AM或hh:mm:ss PM这种格式,用类似下面的函数转成时间类型:
注:这里的to_time(db.time_col, 'hh:mm:ss a')a用来匹配AM/PM,有些工具可能需要用'hh:mm:ss AM/PM'作为格式符,根据你用的工具调整就行。 - 第二步:把转换后的时间类型格式化为
hh24miss(也就是HHmmss)格式的字符串:totext(to_time(db.time_col, 'hh:mm:ss a'), 'HHmmss') - 如果你的工具不支持
to_time这种函数,也可以用字符串处理手动计算:拆分小时、分钟、秒和AM/PM标识,调整小时数后拼接。比如:if right(db.time_col, 2) = 'PM' and left(db.time_col, 2) <> '12' then totext(tonumber(left(db.time_col, 2)) + 12) + mid(db.time_col, 4, 2) + mid(db.time_col, 7, 2) else if right(db.time_col, 2) = 'AM' and left(db.time_col, 2) = '12' then '00' + mid(db.time_col, 4, 2) + mid(db.time_col, 7, 2) else left(db.time_col, 2) + mid(db.time_col, 4, 2) + mid(db.time_col, 7, 2)
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

