sql >> Database >  >> RDS >> SQLite

Hoe te bestellen op maandnaam in SQLite

Probleem:

U wilt de rijen sorteren op maandnummer, gegeven maandnamen (u wilt dat januari eerst wordt weergegeven, december laatst).

Voorbeeld:

De birthday tabel bevat twee kolommen:naam en birthday_month . De maanden worden gegeven in namen, niet in cijfers.

naam verjaardag_maand
Ronan Tisha Januari
December April
Angie Julia April
Narelle Dillan April
Purdie Casey Januari
Donna Nell NULL
Blaze Graeme Oktober

U wilt de rijen sorteren op birthday_month .

Oplossing:

SELECT *
FROM birthday
ORDER BY
 (CASE birthday_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END);

Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op birthday_month ):

naam verjaardag_maand
Purdie Casey Januari
Angie Julia April
Narelle Dillan April
Blaze Graeme Oktober
Ronan Tisha Januari
December NULL
Donna Nell NULL

Discussie:

Om de rijen op maand te sorteren, heb je de maanden nodig in cijfers (geen namen). U kunt maandnamen converteren naar numerieke maanden met behulp van de CASE WHEN clausule. Na de CASE trefwoord, geef de naam van de kolom op. Daarna, na elke WHEN , vermeld de waarde in deze kolom, gebruik de THEN zoekwoord en geef de nieuwe waarde op die u wilt toewijzen in plaats van de oude. Hier is de kolom birthday_month , de huidige waarden in deze kolom zijn 'January ', 'February ', ..., 'December ', en de nieuwe waarden zijn de numerieke maanden 1 , 2, …, 12 . Vergeet niet om de END . te gebruiken nadat u klaar bent met het converteren van alle waarden trefwoord om de CASE WHEN . te sluiten clausule. Kijk eens:

CASE birthday_month
  WHEN 'January' THEN 1
  WHEN 'February' THEN 2
  WHEN 'March' THEN 3
  WHEN 'April' THEN 4
  WHEN 'May' THEN 5
  WHEN 'June' THEN 6
  WHEN 'July' THEN 7
  WHEN 'August' THEN 8
  WHEN 'September' THEN 9
  WHEN 'October' THEN 10
  WHEN 'November' THEN 11
  WHEN 'December' THEN 12
END

Zo converteert u een maandnaam naar een maandnummer. Je kunt het gebruiken om de rijen in oplopende volgorde per maand te sorteren - gebruik het gewoon in de ORDER BY clausule.

Merk op dat in SQLite, NULL s worden als eerste weergegeven bij het sorteren in oplopende volgorde en als laatste bij het sorteren in aflopende volgorde. Ook de rijen met dezelfde birthday_month worden in willekeurige volgorde weergegeven (je ziet mogelijk Angie Julia tweede en Narelle Dillan derde, of Narelle Dillan tweede en Angie Julia derde). Gebruik de DESC . om de volgorde te wijzigen in aflopend trefwoord na de kolom in de ORDER BY clausule. Zo zou de zoekopdracht eruit moeten zien:

SELECT *
FROM birthday
ORDER BY
  (CASE birthday_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END) DESC;

  1. Er is een fout opgetreden tijdens het installeren van pg (0.17.1), en Bundler kan niet doorgaan

  2. Groeperen op clausule in mySQL en postgreSQL, waarom de fout in postgreSQL?

  3. Hoe haal je de datum van de mms uit content://mms.

  4. Oracle UNION-operator uitgelegd