在SQL Server

时间:2015-07-26 06:37:54

标签: sql-server tsql unicode

如何将字符串'۱۳۹۴'转换为'1394'

我尝试更改整理但不起作用。

请注意,我在C#中从外部设备读取数据。

2 个答案:

答案 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)) + ';'

,结果将是

enter image description here

答案 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循环来处理每个字符。