You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Crystal Reports:如何提取数据库字段中连字符前的数字?

在Crystal Reports中提取PO编号连字符前的部分

首先要明确:你的{PO_TEMP_PO_HEADER.PO_Number}是数字字段,直接用字符串截取函数会报错——因为数字类型不支持字符串操作,得先转成字符串类型才能处理。

给你两个可用的公式,按需选择:

公式1:假设所有PO编号都带连字符

如果确定所有数据都包含-,直接用下面的公式:

Left(CStr({PO_TEMP_PO_HEADER.PO_Number}), InStr(CStr({PO_TEMP_PO_HEADER.PO_Number}), "-") - 1)
  • CStr():把数字字段转成字符串,让后续的字符串函数能正常工作
  • InStr():定位连字符-在字符串中的位置
  • Left():从字符串开头截取到连字符前一位的内容

公式2:兼容无连字符的情况

如果存在没有连字符的PO编号(避免因索引为0导致报错),用带判断的公式:

Local StringVar poStr := CStr({PO_TEMP_PO_HEADER.PO_Number});
Local NumberVar dashPos := InStr(poStr, "-");

If dashPos > 0 Then
    Left(poStr, dashPos - 1)
Else
    poStr  // 没有连字符时直接返回原内容

常见报错原因

你之前试的公式报错,大概率是没把数字字段转成字符串就直接用Left/InStr这类函数——Crystal Reports会拒绝对数字类型执行字符串操作,必须先转成字符串才能处理。

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:32:21