如何将字符串'۱۳۹۴'
转换为'1394'
?
我尝试更改排序规则,但并没有起作用。
请注意,我是在C#中从外部设备读取数据。
如何将字符串'۱۳۹۴'
转换为'1394'
?
我尝试更改排序规则,但并没有起作用。
请注意,我是在C#中从外部设备读取数据。
我在网上搜索后尝试解决了这个问题,得出结论最好的解决方法是使用函数。
ALTER FUNCTION [dbo].[udf_ReplaceArabicNumbers]
(@str NVARCHAR(1000))
RETURNS NVARCHAR(2000)
AS
BEGIN
DECLARE @i INT = 1
WHILE @i<=LEN(@str)
BEGIN
DECLARE @val NVARCHAR(1)
SET @val = SUBSTRING(@str, @i, 1)
DECLARE @newchar NVARCHAR(1)
SET @newchar = CASE(@val)
WHEN N'۱' THEN 1
WHEN N'۲' THEN 2
WHEN N'۳' THEN 3
WHEN N'۴' THEN 4
WHEN N'۵' THEN 5
WHEN N'۶' THEN 6
WHEN N'۷' THEN 7
WHEN N'۸' THEN 8
WHEN N'۹' THEN 9
WHEN N'۰' THEN 0
END
SET @str = REPLACE(@str, @val, @newchar)
SET @i+=1;
END
RETURN @str
END
select [dbo].[udf_ReplaceArabicNumbers] (N'۱۳۹۴')
我参考了这个网站http://unicode-table.com/en/
通过UNICODE
,我们可以获取HTML代码
并在我们的程序中使用。
select '&#' + cast (UNICODE(N'۱')as nvarchar(10)) + ';',
'&#' + cast (UNICODE(N'۳')as nvarchar(10)) + ';',
'&#' + cast (UNICODE(N'۹')as nvarchar(10)) + ';',
'&#' + cast (UNICODE(N'۴')as nvarchar(10)) + ';'
结果将会是:
基于 Unicode 代码点数字的属性,您可以使用类似以下的方法:
DECLARE @ArabicNumber NVARCHAR(4)
SET @ArabicNumber=N'۱۳۹۴'
SELECT
LEFT(CONVERT(NVARCHAR(4),CONVERT(VARBINARY(8),
CONVERT(BIGINT,CONVERT(VARBINARY(8),CONVERT(NCHAR(4),@ArabicNumber)))
& CONVERT(VARBINARY(8),REPLICATE(0x0F00,4))
^ CONVERT(VARBINARY(8),REPLICATE(0x3000,4))
)),LEN(@ArabicNumber))
如果输入字符串仅包含数字且限制在4个字符以内,则适用于位运算,以适应bigint。对于更长的字符串,应使用WHILE循环处理每个字符。