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

如何将波斯数字转换为整数?SQL触发器适配波斯数字输入问题

解决波斯数字在SQL Server触发器数值校验中的问题

我完全懂你的困扰——SQL Server自带的ISNUMERIC()函数对波斯(阿拉伯-波斯)数字的支持很差,像۴۵这种合法的数值输入,会被它误判为非数值,导致触发器直接回滚了正常操作。下面是具体的解决方案:

核心问题分析

ISNUMERIC()函数只认拉丁体系的阿拉伯数字(0-9),对于波斯数字(۰-۹)这类Unicode字符,它会直接返回0,所以你的触发器才会错误拦截合法输入。

解决方案步骤

1. 编写波斯数字转阿拉伯数字的自定义函数

首先我们需要一个工具函数,把输入里的波斯数字字符逐个替换成对应的拉丁阿拉伯数字:

CREATE FUNCTION dbo.ConvertPersianToArabicDigits(@Input NVARCHAR(100))
RETURNS NVARCHAR(100)
AS
BEGIN
    DECLARE @Output NVARCHAR(100) = @Input
    
    -- 逐个替换波斯数字为阿拉伯数字
    SET @Output = REPLACE(@Output, N'۰', N'0')
    SET @Output = REPLACE(@Output, N'۱', N'1')
    SET @Output = REPLACE(@Output, N'۲', N'2')
    SET @Output = REPLACE(@Output, N'۳', N'3')
    SET @Output = REPLACE(@Output, N'۴', N'4')
    SET @Output = REPLACE(@Output, N'۵', N'5')
    SET @Output = REPLACE(@Output, N'۶', N'6')
    SET @Output = REPLACE(@Output, N'۷', N'7')
    SET @Output = REPLACE(@Output, N'۸', N'8')
    SET @Output = REPLACE(@Output, N'۹', N'9')
    
    RETURN @Output
END

注意:必须用NVARCHAR类型,且给字符加N前缀,确保SQL Server能正确识别Unicode编码的波斯数字。

2. 修改触发器,基于转换后的值做校验

我建议用TRY_CONVERT()替代ISNUMERIC()——因为ISNUMERIC()会把一些奇怪的字符(比如$、+)误判为数值,而TRY_CONVERT()只有在真正能转换为指定数值类型时才返回结果,否则返回NULL,准确性高得多。

修改后的触发器代码:

CREATE TRIGGER trg_ValidateNumericValue -- 替换成你的触发器名称
ON YourTableName -- 替换成你的表名
AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;

    -- 先转换波斯数字,再校验是否为有效数值
    IF EXISTS (
        SELECT * 
        FROM inserted i 
        WHERE TRY_CONVERT(NUMERIC(18, 0), dbo.ConvertPersianToArabicDigits(i.value)) IS NULL
    )
    BEGIN
        ROLLBACK TRANSACTION;
        RAISERROR('When productType is numeric, you must insert valid numeric characters (Persian digits are allowed)', 18, 1);
        RETURN;
    END
END

额外补充

  • 如果你的业务需要存储阿拉伯数字而非波斯数字,可以在触发器里直接转换后更新记录,或者在插入前由应用层处理;如果只是做校验,上面的方案就足够了。
  • TRY_CONVERT()支持SQL Server 2012及以上版本,如果你的版本更低,可以考虑转换后用ISNUMERIC(),但还是推荐尽量升级到支持TRY_CONVERT的版本,避开ISNUMERIC的各种坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:24:14