如何将字符串'۱۳۹۴'
转换为'1394'
?
我尝试更改整理但不起作用。
请注意,我在C#中从外部设备读取数据。
答案 0 :(得分:3)
我试图在互联网上搜索后解决问题我得出结论解决这个问题的最佳方法是功能
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-Code
并在我们的计划中使用
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)) + ';'
,结果将是
答案 1 :(得分:0)
根据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))
如果输入字符串仅包含数字,则它有效,并且对于按位运算,它适用于bigint以适合bigint。对于更长的字符串,您应该使用WHILE循环来处理每个字符。