2017-02-14 84 views
-2

ローマ数字が付いているテーブル(SQL Server)からレコードを検出したい。次のようにSQL Serverでレコードにローマ数字が含まれているかどうかを調べる方法は?

表にデータを持っている:だから

Column A | Column B 
----------------------------- 
1   | AMC I XYZAQS 
2   | ABC IV 2 XYZQWS 
3   | ANR XVI ANCVP 
4   | SWD POL 2# 

、結果は最初の3つのレコードがこの程度

+3

文字がローマ数字であるかどうかをどのように知っていますか?あなたのサンプルの4番目のレコードはローマ数字でもある 'L'を持っています。なぜそれを選択したくないのですか? – HoneyBadger

+0

周辺言語は何ですか? 'LIV'はスウェーデン語のローマ数字か、単に「人生」という言葉ですか? –

+0

私はそれが他の言語で本当の意味を持っているという事実にかかわらず、ローマ数字であると考えます。 – SChowdhury

答えて

0

は何でしょうか?

DECLARE @dummy TABLE(A INT,B VARCHAR(100)); 
INSERT INTO @dummy VALUES 
(1,'AMC I XYZAQS') 
,(2,'ABC IV 2 XYZQWS') 
,(3,'ANR XVI ANCVP') 
,(4,'SWD POL 2#'); 

WITH Casted AS 
(
    SELECT A 
      ,B 
      ,CAST('<x>' + REPLACE((SELECT B AS [*] FOR XML PATH('')),' ','</x><x>') + '</x>' AS XML) InParts 
    FROM @dummy 
) 
,Splitted AS 
(
    SELECT A 
      ,B 
      ,x.value('.','nvarchar(max)') AS part 
    FROM Casted 
    OUTER APPLY InParts.nodes('x') AS Parts(x) 
) 
SELECT * FROM Splitted 
WHERE UPPER(part) NOT LIKE '%[0-9ABEFGHJKNOPQRSTUWYZ]%' 

結果

A B    part 
1 AMC I XYZAQS I 
2 ABC IV 2 XYZQWS IV 
3 ANR XVI ANCVP XVI 

これはローマ数字のいずれかのルールをチェックしません。特殊文字の存在を確認するだけです

+1

ニースのアプローチですが、結果に 'ixv' – devio

+1

@devioなどの無効な数字のシーケンスも含まれています。それは私の最後の行です:-) T-SQL *でこのようなルール*をチェックすると、チェーンソーでパンを切っています... – Shnugo

+1

@devio - 私はudfを使って "Part"を10進数のシステムに変換しました関数が有効な数値を返さない場合は無視されます。このようにして、結果を一歩先にフィルタリングできます。 – SChowdhury

関連する問題