sql >> Database >  >> RDS >> Oracle

uitvoer met de eerste en laatste letter als klinker (a,e,i,o,u)

Ervan uitgaande dat alle stadsnamen allemaal kleine letters zijn, zou je zoiets als dit kunnen doen:

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) neemt de substring van city beginnend op positie 1 en van lengte 1 (d.w.z. alleen de eerste letter). substr(city, -1, 1) lijkt erg op elkaar, alleen de positie is anders:-1 betekent eerste letter van het einde van de string - dus dit geeft je de laatste letter van de plaatsnaam.

Als city mag zowel hoofdletters als kleine letters hebben, in de WHERE clausule gebruik lower(city) in plaats van city .

BEWERKEN :Op veler verzoek, hier is hoe hetzelfde kan worden gedaan met reguliere expressies. Het heeft echter geen zin om hier een reguliere expressiebenadering te gebruiken; de standaard tekenreeksfuncties (zoals SUBSTR) zijn vrijwel zeker veel sneller dan alles dat op reguliere expressies is gebaseerd.

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

(a|e|i|o|u) betekent precies een van die tekens. ^ betekent anker aan het begin van de string, en op dezelfde manier $ aan het einde van de snaar. Strikt genomen vereist dit dat de plaatsnaam minimaal twee letters lang is; als plaatsnamen van één letter mogelijk zijn, kan dit eenvoudig worden gewijzigd. (De SUBSTR-aanpak vereist geen wijzigingen.)

Het laatste argument, 'i' , maakt de regexp-overeenkomst hoofdletter ongevoelig (voor het geval dat nodig is).




  1. Kan ik datumrijen in kolommen draaien zonder de datums in de spil op te geven? Oracle SQL

  2. Kan niet selecteren waar ip=inet_pton($ip)

  3. Een cursor terugbrengen van een innerlijke procedure naar een uiterlijke procedure in orakel pl/sql

  4. Hoe kan een query 2 cellen vermenigvuldigen voor elke rij MySQL?