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

如何在C#中实现SQL Server式的去除前导字符与零的功能?

实现SQL中去除前导非数字和零的C#代码

嘿,我来帮你把这个SQL逻辑转换成C#代码!你的SQL语句核心是找到字符串中第一个非零数字(1-9)的位置,然后从该位置开始截取到字符串末尾,以此去掉前面的非数字字符和所有前导零。下面给你两种简洁的实现方式:

方法一:手动遍历字符(直观易懂)

这种方式和SQL的逻辑最贴近,逐个字符查找第一个非零数字的位置,然后截取剩余部分:

public static string CleanDeliveryNumber(string deliveryNo)
{
    if (string.IsNullOrWhiteSpace(deliveryNo))
        return string.Empty;

    int firstNonZeroDigitIndex = -1;
    for (int i = 0; i < deliveryNo.Length; i++)
    {
        char currentChar = deliveryNo[i];
        // 找到第一个1-9的字符
        if (currentChar >= '1' && currentChar <= '9')
        {
            firstNonZeroDigitIndex = i;
            break;
        }
    }

    // 如果没有找到非零数字,返回空(和SQL逻辑一致);如果需要返回"0"可自行调整
    if (firstNonZeroDigitIndex == -1)
        return string.Empty;

    // 从第一个非零数字位置开始截取到末尾
    return deliveryNo.Substring(firstNonZeroDigitIndex);
}

测试示例:

Console.WriteLine(CleanDeliveryNumber("ABC-000001")); // 输出: "1"
Console.WriteLine(CleanDeliveryNumber("CDE-000026")); // 输出: "26"
Console.WriteLine(CleanDeliveryNumber("XYZ-00012-78")); // 输出: "12-78"

方法二:正则表达式(简洁高效)

用正则表达式直接匹配从第一个非零数字开始到结尾的所有内容,代码更简洁:

public static string CleanDeliveryNumber(string deliveryNo)
{
    if (string.IsNullOrWhiteSpace(deliveryNo))
        return string.Empty;

    // 正则匹配第一个非零数字及后面的所有字符
    var match = System.Text.RegularExpressions.Regex.Match(deliveryNo, @"[1-9].*");
    return match.Success ? match.Value : string.Empty;
}

这个正则表达式@"[1-9].*"的意思是:找到第一个出现的1-9字符,然后匹配该字符之后的所有内容(包括非数字字符),完全对应你的SQL逻辑。

边界情况处理

如果遇到全是零或没有数字的输入(比如"000000"或"ABC-DEF"),上面的代码会返回空字符串,和SQL中PATINDEX找不到匹配项时的结果一致。如果你希望这种情况返回"0",可以在代码中添加额外判断:

比如在手动遍历的方法里修改返回逻辑:

if (firstNonZeroDigitIndex == -1)
{
    // 如果字符串包含零,返回"0",否则返回空
    return deliveryNo.Contains('0') ? "0" : string.Empty;
}

内容的提问来源于stack exchange,提问作者Cát Tường Vy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:58:55