2012-06-14 11 views
5

que tengo que hacer esto en SQL ServerCómo encontrar sólo letras mayúsculas en la palabra a través de la consulta en SQL Server

tengo datos como

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

necesito seleccionar la palabra de dos letras como que coincide el patrón

Space Letter Letter 

he probado este

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

Pero debo tener en cuenta sólo letras mayúsculas para esto (es decir) de salida tiene que ser

MG SP SP SP 

y no incluir de como se encuentra en la última línea del ejemplo Ferraz de Vasconcelos , SP - Brazil

Despejadas en el problema

Ej: vaishnava st northwind GH - El resultado tiene que ser GH

somersert PM vailash hj --Result has to be PM 
+0

siento por las molestias causadas .. –

+1

Qué secuencia de intercalación es la columna usando? – JAQFrost

+0

intercalación utilizamos el genereic- No es sensible a mayúsculas y minúsculas (Inglés) –

Respuesta

0

S electo 2 leters después de coma:

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

o utilizando -:

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

Final, no elegante, solución:

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

Se selecciona dos letras mayúsculas.

+0

He dado un ejemplo, pero no todos los valores tendrán, –

+0

@ArunKumar ¿Tienen las palabras clave '-'? –

+0

Gracias por sus respuestas se adapta a esto, pero no por todos mis datos porque a veces puede que no tenga la última palabra (-brazil) y algunas veces no contan, también –

-1

La intercalación es importante. Es necesario añadir Collate a la consulta, tales como:

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; 

Es posible que tenga una colación diferencia - su actual es claramente sensible a mayúsculas. Puede encontrar su colación actual y reemplazar Latin1_General_CS_AS_KS_WS con la que necesita, reemplazando CI con CS, para obtener la versión más sencilla de su colación actual.

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

+0

En lugar de downvoting, un comentario sería útil. ¿Alguien quiere aclararme lo que está mal? –

0

Podría usted acaba de intentar esto:

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

Example

+0

Esto no funciona en este caso Av. Bergantín. Faria Lima, 1355 4º andar São Paulo, SP 01452-002 Brasil –

+0

¿Siempre habrá un '[COMMA]' y '[SPACE]' antes de los dos caracteres? ¿Es a partir de la entrada del usuario o está generando los valores? – bendataclear

+0

El caso es 1) Siempre hay un espacio entre dos caracteres, pero no se puede asegurar la coma, ya que podría o no contener una coma –

3

Prueba esto: Es necesario tanto para cotejar la columna y especificar las letras mayúsculas. La expresión regular [A-Z] no distingue entre mayúsculas y minúsculas, incluso si especifica una secuencia de intercalación.

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 
0

Creo que esto lo hará ... o una variación del mismo para satisfacer sus necesidades. . En este caso, elegirá el primer par de letras mayúsculas ...

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 

Aamer

+0

Whoops David me derrotó. :) –

Cuestiones relacionadas