Mysql
 sql >> Baza danych >  >> RDS >> Mysql

ORDER BY Kolor z kodem szesnastkowym jako kryterium w MySQL

Chcesz posortować kody szesnastkowe według długości fali, to z grubsza mapuje się na wartość odcienia. Podano kod szesnastkowy jako ciąg składający się z sześciu znaków:RRGGBB .

Musisz tylko utworzyć funkcję, która pobiera ciąg szesnastkowy i wyświetla wartość odcienia, oto formuła z tej odpowiedzi Math.SO :

R' =R/255

G' =G/255

B' =B/255

Cmax =max(R', G', B')

Cmin =min(R', G', B')

Δ =Cmax - Cmin

Chciałem sprawdzić, czy to zadziała, więc przygotowałem przykładowy program w Ruby, który próbkuje 200 losowych kolorów jednolicie z przestrzeni RGB i sortuje je, wynik wygląda jak tęcza!

Oto źródło Rubiego:

require 'paint'

def hex_to_rgb(hex)
  /(?<r>..)(?<g>..)(?<b>..)/ =~ hex
  [r,g,b].map {|cs| cs.to_i(16) }
end

def rgb_to_hue(r,g,b)
  # normalize r, g and b
  r_ = r / 255.0
  g_ = g / 255.0
  b_ = b / 255.0

  c_min = [r_,g_,b_].min
  c_max = [r_,g_,b_].max

  delta = (c_max - c_min).to_f

  # compute hue
  hue = 60 * ((g_ - b_)/delta % 6) if c_max == r_
  hue = 60 * ((b_ - r_)/delta + 2) if c_max == g_
  hue = 60 * ((r_ - g_)/delta + 4) if c_max == b_

  return hue
end

# sample uniformly at random from RGB space
colors = 200.times.map {  (0..255).to_a.sample(3).map { |i| i.to_s(16).rjust(2, '0')}.join   }

# sort by hue
colors.sort_by { |color| rgb_to_hue(*hex_to_rgb(color)) }.each do |color|
  puts Paint[color, color]
end

Uwaga, pamiętaj, aby gem install paint aby uzyskać kolorowy tekst wyjściowy.

Oto wynik:

Powinno być stosunkowo proste napisanie tego jako funkcji SQL zdefiniowanej przez użytkownika i ORDER BY RGB_to_HUE(hex_color_code), jednak moja wiedza na temat SQL jest dość podstawowa.

EDYCJA:opublikowałem to pytanie na dba.SE o konwersji Rubiego na funkcję zdefiniowaną przez użytkownika SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakie są ustawienia sterownika JDBC-mysql dla rozsądnej obsługi DATETIME i TIMESTAMP w UTC?

  2. Dynamicznie wypełniaj wiele pól wejściowych z MySQL w zależności od wybranego elementu listy rozwijanej

  3. Sprawdzanie, czy użytkownik mysql istnieje

  4. Django Nie można dodać lub zaktualizować wiersza podrzędnego:ograniczenie klucza obcego nie powiodło się

  5. Jaki jest właściwy sposób przechowywania tych danych w schemacie MySQL?