функция в сервере sql - PullRequest
       1

функция в сервере sql

0 голосов
/ 21 апреля 2011

Предположим, что:

  • @RowStr является входом
  • @wordstr это строка .... Я собрал арабские буквы

Теперь моя цель - проверить данные Rowstr с помощью этого слова.

Пример: пабби

Каждая буква должна проверяться в wordstr. Если какая-либо буква будет соответствовать слову str, я объявлю, так как входные данные были на арабском языке. Может ли кто-нибудь проверить мою функцию, дать мне предложение?

ALTER FUNCTION [dbo].[Checking_Arabic_English]
(
– Add the parameters for the function here
@RowStr nvarchar(1000)

)
RETURNS Char
AS
BEGIN

declare @WordStr varchar
set WordStr = "ضصثقفغعهخحجدشسيبلاتنمكطئءؤرلاىةوزظذًٌَُلإإٍِلأأْلآآ؟ـ؛،٬"

declare @WordCount int
declare @index int

set @index =0
set @WordCount = 0

while CHARINDEX(@WordStr, @RowStr,@index)>0
begin

SET @index = CHARINDEX(@WordStr,@RowStr,@index)
SET @WordCount = @WordCount + 1
if @index =0
break
else
SET @index = @index + 1
end

if  @WordCount = 0

return = 'E'
else
return = 'A'

END

1 Ответ

0 голосов
/ 21 апреля 2011

Вот еще одна реализация, если она соответствует вашим требованиям.

  • при условии, что обычная пунктуация в порядке, мы внесем в черный список любой латинский символ.
  • эта функция проверяет каждый символ взаданная строка.Если его значение ASCII находится в диапазоне AZ или az, то есть латинского символа, то оно наклоняется,
  • A 1 возвращается при обнаружении латинского символа;0 возвращается, когда латинский символ не найден.
  • несколько print осталось для вас, чтобы проверить, как вам нужно, в качестве сценария adhoc.
  • это не обязательноозначает, что строка арабская;просто это не латынь / английский.
CREATE FUNCTION [dbo].[ContainsEnglishCharacters]
(
    @RowStr nvarchar(1000)
)
RETURNS BIT
AS
BEGIN

    declare @index int;
    SELECT @index = 0;
    declare @thisChar nchar(1);
    while(@index <= LEN(@RowStr))
    begin
         SELECT @thisChar = SUBSTRING(@RowStr,@index,1);
--      print @index
--      print ASCII(@thisChar)
        if (ASCII(@thisChar) BETWEEN 65 and 90 
            OR ASCII(@thisChar) BETWEEN 97 and 122 )
            begin
                SELECT @index=-1;
                BREAK;
            end
        else
            SELECT @index=@index+1;
    end
--  print @index
--  print LEN(@rowStr)
    if (@index =-1)     
        RETURN 1;  --print 'found a latin char!'
    else
        RETURN 0;   --print 'no latin found!'
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...