Mysql
 sql >> база данни >  >> RDS >> Mysql

ПОРЪЧАЙТЕ ПО цвят с шестнадесетичен код като критерий в MySQL

Искате да сортирате шестнадесетични кодове по дължина на вълната, това приблизително съответства на стойността на нюанса. Даден е шестнадесетичен код като низ от шест знака:RRGGBB .

Просто трябва да направите функция, която приема низ от шестнадесетичен код и извежда стойността на нюанса, ето формулата от този Math.SO отговор :

R' =R/255

G' =G/255

B' =B/255

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

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

Δ =Cmax - Cmin

Исках да видя дали това ще работи, затова създадох примерна програма в Ruby, тя взема проби от 200 произволни цвята равномерно от RGB пространството и ги сортира, изходът изглежда като дъга!

Ето източника на Ruby:

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

Забележка, не забравяйте да gem install paint за да получите цветния текст.

Ето изхода:

Би трябвало да е сравнително лесно да напиша това като SQL функция, дефинирана от потребителя и ORDER BY RGB_to_HUE(hex_color_code), но познанията ми за SQL са доста основни.

РЕДАКТИРАНЕ:Публикувах този въпрос в dba.SE относно преобразуването на Ruby в 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. SQL Вмъкване на ред и копирайте вмъкнатия идентификатор за автоматично увеличение в друга колона

  2. SELECT INTO и грешка при недекларирана променлива

  3. Как да свържа IntelliJ с локален MySQL?

  4. MySQL включва нула редове, когато се използва COUNT с GROUP BY

  5. Ред на изтриване с ограничения на външния ключ,