Sql server 在SQL Server中将unicode字符串转换为ascii
如何将字符串Sql server 在SQL Server中将unicode字符串转换为ascii,sql-server,tsql,unicode,Sql Server,Tsql,Unicode,如何将字符串“۱ۯ۴”转换为“1394” 我尝试更改排序规则,但不起作用 请注意,我在C#中从外部设备读取数据。我在互联网上搜索后试图解决问题。我得出结论,解决此问题的最佳方法是函数 ALTER FUNCTION [dbo].[udf_ReplaceArabicNumbers] (@str NVARCHAR(1000)) RETURNS NVARCHAR(2000) AS BEGIN DECLARE @i INT = 1 WHILE @i<=LEN(@st
“۱ۯ۴”
转换为“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
我指的是这个网站
在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循环来处理每个字符。
1394@tinka对看看你为什么不在阅读时进行转换呢?就你的语言而言,它们可能是同一个单词,但实际上就unicode字符而言,它们是两个不同的实体。这就像要求系统自动将“1”转换为“1”。除非您使用映射表,否则无法完成。嗨,我不知道,但您尝试过这个吗?选择ASCII(“ASCII”),但它返回63而不是1394。
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))