sql >> Database >  >> RDS >> Mysql

ORDER OP Kleur met Hex Code als criterium in MySQL

U wilt hexadecimale codes sorteren op golflengte, dit komt ongeveer overeen met de tintwaarde. Gegeven een hexadecimale code als een tekenreeks van zes tekens:RRGGBB .

Je hoeft alleen maar een functie te maken die een hexcode-string inneemt en de tintwaarde uitvoert, hier is de formule van dit Math.SO-antwoord :

R' =R/255

G' =G/255

B' =B/255

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

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

Δ =Cmax - Cmin

Ik wilde zien of dit zou werken, dus ik maakte een voorbeeldprogramma in Ruby, het samplede 200 willekeurige kleuren uniform uit RGB-ruimte, en sorteerde ze, de uitvoer ziet eruit als een regenboog!

Hier is de Ruby-bron:

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

Let op, zorg ervoor dat u gem install paint om de gekleurde tekstuitvoer te krijgen.

Dit is de uitvoer:

Het zou relatief eenvoudig moeten zijn om dit te schrijven als een door de gebruiker gedefinieerde SQL-functie en ORDER DOOR RGB_naar_HUE(hex_color_code), maar mijn SQL-kennis is vrij eenvoudig.

EDIT:ik heb deze vraag op dba.SE geplaatst over het converteren van de Ruby naar een door de gebruiker gedefinieerde SQL-functie.



  1. Laravel 5.5 Error Basistabel of weergave bestaat al:1050 Tabel 'gebruikers' bestaat al

  2. Hoe gebruik je een externe sleutel in sqlite?

  3. Onderhouden van een gegroepeerde lopende MAX (of MIN)

  4. Een overzicht van vertrouwde extensies in PostgreSQL 13