Как преобразовать строку '۱۳۹۴'
в '1394'
?Преобразование строки Unicode в ascii в SQL Server
Я стараюсь изменить сортировку, но не работает.
Обратите внимание, что я прочитал данные с внешнего устройства на C#.
Как преобразовать строку '۱۳۹۴'
в '1394'
?Преобразование строки Unicode в ascii в SQL Server
Я стараюсь изменить сортировку, но не работает.
Обратите внимание, что я прочитал данные с внешнего устройства на 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-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)) + ';'
и результат был бы
Исходя из свойств чисел юникода кода точки, вы могли бы использовать что-то вроде этого:
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' это действительно 1394 – wiretext
@tinka да. см. http://unicode-table.com/ru/#arabic – Hamid
Почему вы не конвертируете его, когда читаете его? – Paparazzi