5

我必须在 SQL Server 中执行此操作

我有数据,例如

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

我需要选择与模式匹配的两个字母单词

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)

它选择两个大写字母。

于 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为您需要的排序规则,将 替换为CICS以获得当前排序规则的区分大小写的版本。

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

于 2012-06-14T14:55:31.477 回答