SQL Server 2017插入阿拉伯数字至int列报错:无法识别该数字
解决SQL Server 2017无法识别阿拉伯数字插入int列的问题
这个问题我之前帮不少开发者解决过——SQL Server 2017默认确实不会把阿拉伯文里的东阿拉伯数字(比如١、٢、٣这类字符)识别为int类型,因为int列只认0-9的西阿拉伯数字或者直接的数值。给你两个实用的解决办法:
方法一:在SQL端用
TRANSLATE函数转换(推荐,适配2017版本)
SQL Server 2017及以上支持TRANSLATE函数,可以快速把东阿拉伯数字映射为西阿拉伯数字,再转换为int类型。示例代码如下:-- 模拟输入的东阿拉伯数字 DECLARE @ArabicInput NVARCHAR(50) = '١٢٣٤'; -- 转换后插入int列 INSERT INTO YourTableName(YourIntColumn) VALUES(CAST(TRANSLATE(@ArabicInput, N'٠١٢٣٤٥٦٧٨٩', N'0123456789') AS INT));原理是
TRANSLATE会逐个替换字符:把٠换成0,١换成1,以此类推,转换后的字符串就能正常转成int了。方法二:在应用层提前转换
如果你的数据是从应用程序传入的,建议在应用代码里先把东阿拉伯数字转换成西阿拉伯数字再发送给SQL Server,这样可以减少数据库端的处理逻辑,整体性能更优。比如在C#、Java等语言里都有现成的字符转换工具类可以实现这一点。
另外要注意:如果是误输入了全角西阿拉伯数字(比如1、2),也可以用类似的思路处理,把全角字符替换为半角即可。
内容的提问来源于stack exchange,提问作者Hamid
相关产品推荐
相关产品推荐

