Expressão SQL para encontrar strings, incluindo letras no ArcGIS Desktop?

8

Estou trabalhando no ArcGIS 9.3.1. Eu tenho um shapefile com um campo de string contendo nomes de pontos como estes:

10
12
12/13
t/9
6577y
1234
12t9
124y67
u9

e assim por diante (e sim, eu sei que parece uma bagunça colossal. Não é o meu design). Usando WHERE MyColumn LIKE '%Search String%'posso encontrar (usando selecionar por atributo) os que contêm uma letra específica ou uma barra invertida (/).

Como posso selecionar todos os valores que contêm uma letra (neste exemplo: t / 9, 6577y, 12t9, 124y67, u9), sem me importar com qual letra é ou sua posição? (existe uma maneira de especificar uma posição?)

jonatr
fonte
3
Você tem certeza de que não bateu a cabeça no teclado e saiu? : P
blah238
1
Infelizmente não.
jonatr

Respostas:

2

Para algo rápido e (muito) sujo, você pode usar algo assim para encontrar todos os registros com qualquer um dos caracteres alfabéticos padrão de 26 letras. Use localizar e substituir no seu editor de texto favorito para alterar o MyColumnnome para o nome real da coluna.

UPPER("MyColumn") LIKE('%A%') OR
UPPER("MyColumn") LIKE('%B%') OR
UPPER("MyColumn") LIKE('%C%') OR
UPPER("MyColumn") LIKE('%D%') OR
UPPER("MyColumn") LIKE('%E%') OR
UPPER("MyColumn") LIKE('%F%') OR
UPPER("MyColumn") LIKE('%G%') OR
UPPER("MyColumn") LIKE('%H%') OR
UPPER("MyColumn") LIKE('%I%') OR
UPPER("MyColumn") LIKE('%J%') OR
UPPER("MyColumn") LIKE('%K%') OR
UPPER("MyColumn") LIKE('%L%') OR
UPPER("MyColumn") LIKE('%M%') OR
UPPER("MyColumn") LIKE('%N%') OR
UPPER("MyColumn") LIKE('%O%') OR
UPPER("MyColumn") LIKE('%P%') OR
UPPER("MyColumn") LIKE('%Q%') OR
UPPER("MyColumn") LIKE('%R%') OR
UPPER("MyColumn") LIKE('%S%') OR
UPPER("MyColumn") LIKE('%T%') OR
UPPER("MyColumn") LIKE('%U%') OR
UPPER("MyColumn") LIKE('%V%') OR
UPPER("MyColumn") LIKE('%W%') OR
UPPER("MyColumn") LIKE('%X%') OR
UPPER("MyColumn") LIKE('%Y%') OR
UPPER("MyColumn") LIKE('%Z%')

Para algo mais complexo, eu usaria expressões regulares em um SearchCursor em Python (consulte o remódulo ) ou colocaria os dados em um banco de dados real e usaria seus recursos específicos de pesquisa de strings.

blah238
fonte
2

Você pode considerar adicionar uma coluna inteira ao seu shapefile, chamando-a de "MATCH". Em seguida, use a calculadora de campo para executar testes de correspondência de sequência em um bloco de código pré-lógico. Depois que o campo Corresponder for preenchido, você poderá selecioná-lo usando a ferramenta Selecionar por atributos.

Nota lateral: Já faz muito tempo, mas parecia que o INFO suportava uma pseudo-coluna (era $ RECSEL?) Que permitia selecionar coisas usando um comando CALCULATE. Este caso de uso indica uma situação em que algo assim seria útil. OMI, Esri deve aprimorar a calculadora de campo para suportar pseudo-colunas para seleção. A calculadora de campo apresentaria um campo de destino booleano quando o usuário clicar com o botão direito do mouse no bloco sem rótulo ao lado do cabeçalho de campo da coluna mais à esquerda.

Atualização: se você concordar, vote na minha ideia .

insira a descrição da imagem aqui

Kirk Kuykendall
fonte
Você pode especificar o que você quer dizer com "testes de correspondência de string em um bloco de código pré-lógico" ???
jonatr
Na calculadora de campo, clique na caixa de seleção "show codeblock". Você poderá usar as funções de manipulação de string do VBA. Não se empolgue, o VBA desaparece às 10.0. Consulte este artigo da base de dados .
Kirk Kuykendall
2

Converta em um geodatabase pessoal.

Curingas:

  • ponto de interrogação ?= qualquer caractere alfa
  • sinal de libra #= qualquer caractere numérico

[pointname] como "12?" deve retornar 12A, 12b, 12c e assim por diante.

gkh
fonte
0

Se os seus dados estiverem no MS-SQL, tente intervalos dentro de pesquisas, como

... where col like '%[a-z]%'

ou um número após uma string com qualquer caractere entre:

`... onde col como '% [az] _ [0-9]%'

Se você precisar procurar um '-', coloque-o no início da string de pesquisa, como

... where col like '%[-a-z0-9]%'

corresponderia a '-' ou uma letra ou um número

Christian4145
fonte