2011-04-21 101 views
0

讓我們假設:功能在SQL Server

  • @RowStr是輸入
  • @wordstr是一個字符串....我已經收集了阿拉伯字母

我現在的目標是檢查這個wordstr的Rowstr數據。

例如:pubby

每個字母必須在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 
+0

這是你的目標,以獲取在@RowStr所有字符都在您的白名單@WordStr,或只是測試的英文字符的存在? – 2011-04-21 04:22:09

+0

yes campbell ...首先從@rowstr中獲取所有字符,然後我需要檢查每個字符並且必須與@wordstr進行比較...以便我可以更新字符串,無論是以英語還是阿拉伯語爲基礎,通過基於wordcount返回值如果它的域名是英文的,那麼itz阿拉伯語 – pubby 2011-04-21 04:26:06

+0

@pubby:你已經描述了你的實現:)業務需求是什麼:是否需要將有效字符列入白名單,或者你可以將英文/拉丁字母黑名單? – 2011-04-21 04:30:40

回答

0

這是另一個實現,如果它符合您的要求。

  • 假設常規標點符號確定,我們會將任何拉丁字符列入黑名單。
  • 此函數檢查給定字符串中的每個字符。如果其ASCII值在A-Z或a-z的範圍內,即拉丁字符,則它傾斜,
  • 當找到拉丁字符時返回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 @[email protected]+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 
+0

@campbell你怎麼知道英語Ascii值是在65-90和97-122之間同樣我們可以知道阿拉伯語.. ??任何想法,以便我可以取代阿拉伯語的Ascii值...! – pubby 2011-04-21 04:51:15

+0

@campbell謝謝你......你的想法幾乎奏效.. !!但在執行時,如果我發送阿拉伯字符知道,那麼它正在考慮爲問號'?' – pubby 2011-04-21 07:00:20

+0

@pubby:我更正了我的答案,將@thisChar定義爲'nchar'。 – 2011-04-21 13:38:59