LINUX.ORG.RU

Что значит рандомно?

anc ★★★★★
()

ЯННП.

А, понял, отвечаю:

Если значения хранятся в БД в таком виде, то, надо повесить за яйца автора этого волшебного решения, а затем переделать на нормальную реляцию.

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от anonymus123

Если номера с одинаковым количеством цифр:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('111|222|333|444|555', '|', FLOOR(RAND()*(CEIL(CHAR_LENGTH('111|222|333|444|555')/4)-1+1)+1)), '|', -1);

а разными, слишком громоздко получается, лень искать решение.

yandrey ★★
()
Ответ на: комментарий от fernandos

Это ещё фигня, у нас было поинтереснее, как вам варианты: "Н1-61,Н71-89,93,Н97..", "Н1-25,Н29..,Ч2-36", "Н1-19,23,25,27,31,33,37,Н41..", "Н29-43,Н47-53,Н59..,Ч26.." И вот это «было», работает до сих пор. :)

anc ★★★★★
()

Тебе точно нужно прямо в запросе это делать? Не очень понятно зачем. Проще будет в приложении распарсить эту порнографию. Даже если нужно потом что-то выбирать по результату лучше сделать отдельный запрос чем городить костыли.

А если надо, то лучше раскидать это в нормальную таблицу и не сношать себе мозг.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от anonymus123

А если поле может содержать разное кол. номеров

CREATE FUNCTION `sp_get_rnd_val`(src varchar(100), delim char(1)) RETURNS varchar(100)
BEGIN
	DECLARE c, r int;
	SET c = 1 + LENGTH(src) - LENGTH(REPLACE(src, delim, ''));
	SET r = 1 + FLOOR(RAND() * c);
	return SUBSTRING_INDEX(SUBSTRING_INDEX(src, delim, r), delim, -1);
END
MariaDB [test]> select sp_get_rnd_val('111|222|333|444|555', '|');
+--------------------------------------------+
| 444                                        |
+--------------------------------------------+

MariaDB [test]> select sp_get_rnd_val('111|222|333|444', '|');
+----------------------------------------+
| 333                                    |
+----------------------------------------+

MariaDB [test]> select sp_get_rnd_val('111222|333444', '|');
+--------------------------------------+
| 111222                               |
+--------------------------------------+

MariaDB [test]> select sp_get_rnd_val('111222333444', '|');
+-------------------------------------+
| 111222333444                        |
+-------------------------------------+

MariaDB [test]> select sp_get_rnd_val('lor.or.lol', '.');
+-----------------------------------+
| lol                               |
+-----------------------------------+
Toxo2 ★★★★
()
Ответ на: комментарий от fernandos

ЧСХ понять логику работы функции которая парсит эту фигню уже давно никто не пытается, на другие ЯП переносят as is :)

anc ★★★★★
()

если поле имеет такой вид, то надо все переделать. это же дичь

Anoxemian ★★★★★
()
Ответ на: комментарий от anc

Это прекрасно: улыба тонко переходит в осознание бренности бытия ;).

уже давно никто не пытается, на другие ЯП переносят as is

Звучит как наказание.

fernandos ★★★
()
Ответ на: комментарий от fernandos

улыба тонко переходит в осознание бренности бытия ;).

Про бренность бытия вы в чем-то угадали. Рождено «это» было ещё в фоксе, под досом, так с тех пор и кочует... :)

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.