sql >> Database teknologi >  >> RDS >> Oracle

output, der har første og sidste bogstav som vokal(a,e,i,o,u)

Hvis vi antager, at alle bynavne alle er små bogstaver, kan du gøre noget som dette:

select city
from   station
where  substr(city,  1, 1) in ('a', 'e', 'i', 'o', 'u')
  and  substr(city, -1, 1) in ('a', 'e', 'i', 'o', 'u')

substr(city, 1, 1) tager understrengen af ​​city startende ved position 1 og længde 1 (betyder kun det første bogstav). substr(city, -1, 1) er meget ens, bare positionen er anderledes:-1 betyder første bogstav fra slutningen af strengen - så dette vil give dig det sidste bogstav i bynavnet.

Hvis city kan have både store og små bogstaver i WHERE klausul brug lower(city) i stedet for city .

REDIGER :Efter populær anmodning, her er, hvordan det samme kan gøres med regulære udtryk. Det nytter dog ikke at bruge en regulært udtrykstilgang her; standardstrengfunktionerne (som SUBSTR) er næsten sikre på at være meget hurtigere end noget andet baseret på regulære udtryk.

....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')

(a|e|i|o|u) betyder præcis en af ​​disse karakterer. ^ betyder anker i begyndelsen af ​​strengen, og tilsvarende $ for enden af ​​strengen. Det kræver strengt taget, at bynavnet er mindst to bogstaver langt; hvis bynavne på ét bogstav er mulige, kan dette nemt ændres. (SUBSTR-tilgangen kræver ingen ændringer.)

Det sidste argument, 'i' , gør regexp-matchende store og små bogstaver ufølsom (bare hvis det er nødvendigt).




  1. Slet fra mange til mange forhold i MySQL

  2. Postgres unikke indeks med flere kolonner til sammenføjningstabel

  3. Mysql rekursion?

  4. Stort resultatsæt på postgresql-forespørgsel