5

SQL Serverでこれを行う必要があります

私は次のようなデータを持っています

Belo Horizonte , MG - Brazil
São Paulo , SP - Brazil
Barueri , SP - Brazil
Ferraz de Vasconcelos , SP - Brazil

パターンに一致する 2 文字の単語を選択する必要があります

Space Letter Letter

私はこれを試しました

SUBSTRING(ADDRESS_BLOCK,PatIndex('% [A-Z][A-Z] %',ADDRESS_BLOCK),3)

しかし、これには大文字のみを考慮する必要があります(つまり、出力は

MG SP SP SP 

de例の最後の行にあるように含めないでくださいFerraz de Vasconcelos , SP - Brazil

問題の明確な見方

例: vaishnava st northwind GH -- 結果は GH でなければなりません

 somersert PM vailash hj  --Result has to be PM
4

5 に答える 5

5

これを試してください:列を照合し、大文字を指定する必要があります。照合シーケンスを指定した場合でも、正規表現[AZ]では大文字と小文字は区別されません。

SELECT    SUBSTRING(
            ADDRESS_BLOCK
            , PatIndex(    
                N'% [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ] %'
                , ADDRESS_BLOCK COLLATE sql_latin1_general_cp1_cs_as
                )
            , 3
            ) 
FROM 
    (
        SELECT 'Belo Horizonte , MG - Brazil' ADDRESS_BLOCK
        UNION
        SELECT 'São Paulo , SP - Brazil' 
        UNION
        SELECT 'Barueri , SP - Brazil' 
        UNION
        SELECT 'Ferraz de Vasconcelos , SP - Brazil' 
    ) n
于 2012-06-15T20:58:30.420 に答える
1

私はこれがそれを行うと思います...またはあなたのニーズに合わせてそのバリエーション。この場合、大文字の最初のペアが選択されます。

with dataset as 
(
    select 'Belo Horizonte , MG - Brazil' as val union all
    select 'São Paulo , SP - Brazil' as val union all 
    select 'Ferraz de Vasconcelos , SP - Brazil'  
)
select Substring(val ,PatIndex('%[A-Z][A-Z] %' COLLATE LATIN1_gENERAL_BIN,val),3)
from dataset
于 2012-06-18T07:11:01.330 に答える
0

これを試してみてください:

SUBSTRING([ADDRESS_BLOCK],PatIndex('%, [A-Z][A-Z] -%',[ADDRESS_BLOCK])+2,2)

于 2012-06-15T08:48:11.453 に答える
0

カンマの後に 2 文字を選択:

select substring(columnname, charindex(',', columnname) + 2, 2)
from tablename

または使用-

select substring(columnname, charindex('-', columnname) - 3, 2)
from tablename

エレガントではない最終的な解決策:

SUBSTRING(ADDRESS_BLOCK,PatIndex('% [ABCDEFGHIJKLMOPQWXYZ][ABCDEFGHIJKLMOPQWXYZ] %',ADDRESS_BLOCK),3)

2 つの大文字を選択します。

于 2012-06-14T13:01:43.220 に答える
-1

照合が重要です。Collate次のように、クエリに追加する必要があります。

Select * from table where exists (Select SUBSTRING(ADDRESS_BLOCK,PatIndex('% [A-Z][A-Z] %',ADDRESS_BLOCK),3) from table)
COLLATE Latin1_General_CS_AS_KS_WS ASC;

差分照合が必要な場合があります-現在の照合は明らかに大文字と小文字を区別しません。現在の照合を見つけて、Latin1_General_CS_AS_KS_WS必要なものに置き換え、CIをに置き換えてCS、現在の照合の大文字と小文字を区別するバージョンを取得できます。

参照: http://msdn.microsoft.com/en-us/library/ms184391.aspx

于 2012-06-14T14:55:31.477 に答える