sql >> Databasteknik >  >> RDS >> Oracle

utdata som har första och sista bokstaven som vokal(a,e,i,o,u)

Om du antar att alla stadsnamn är gemener kan du göra något så här:

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) tar delsträngen till city börjar på position 1 och av längd 1 (vilket betyder bara den första bokstaven). substr(city, -1, 1) är väldigt lik, bara positionen är annorlunda:-1 betyder första bokstaven från slutet av strängen - så detta ger dig den sista bokstaven i stadsnamnet.

Om city kan ha både stora och små bokstäver i WHERE sats använd lower(city) istället för city .

REDIGERA :På populär begäran, här är hur detsamma kan göras med reguljära uttryck. Det är dock ingen idé att använda ett tillvägagångssätt för reguljära uttryck här; standardsträngfunktionerna (som SUBSTR) är nästan säkert mycket snabbare än något annat baserat på reguljära uttryck.

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

(a|e|i|o|u) betyder exakt en av dessa karaktärer. ^ betyder ankare i början av strängen och på liknande sätt $ i slutet av strängen. Strängt taget kräver detta att stadsnamnet är minst två bokstäver långt; om stadsnamn med en bokstav är möjliga kan detta enkelt ändras. (SUBSTR-metoden kräver inga ändringar.)

Det sista argumentet, 'i' , gör regexp-matchning skiftläge okänslig (ifall det skulle behövas).




  1. SQL Server, använder en tabell som en kö

  2. Hur man skapar och utför procedurer i MySQL arbetsbänk

  3. Månader mellan att inte returnera korrekt värde

  4. Utlöser utlösare vid uppdatering av kolumnA eller kolumnB eller kolumnC