Есть ли аналогичная функция generate_series в MySQL?

0

Мне интересно, есть ли в MySQL функция, например generate_series, которая обычно принимает начальное целочисленное значение, конечное и приращение и возвращает массив всех значений, включая и между началом и концом. Если такой функции нет, как бы объявить ее в MySQL?

  • 0
    Какая у вас версия mysql?
  • 1
    Что вы пытаетесь сделать с этим? Вы можете получить необходимый результат, используя пользовательскую переменную, которую вы увеличиваете в каждой строке.
Показать ещё 1 комментарий
Теги:

1 ответ

3

Это слишком долго для комментария.

Нет такой функции. MySQL не поддерживает пользовательские функции, которые возвращают таблицы, поэтому вы не можете определить свои собственные. В v8+ вы можете использовать рекурсивный CTE для генерации чисел.

Однако самый простой способ - это, вероятно, определить свою собственную таблицу numbers. Другая альтернатива - использовать любую старую большую таблицу и сделать что-то вроде:

select (@rn := @rn + 1) as num
from bigtable t cross join
     (select @rn := 0) params
limit 100;  -- however many numbers you want

Конечно, у bigtable должно быть достаточно строк для чисел, которые вы хотите создать.

  • 1
    +10 В любом случае, если вы нарежете его, это не очень приятно ... зависеть от содержимого отдельной, специальной таблицы последовательности «numbers» или «seq», или зависеть от другой большой таблицы, которая имеет какую-то гарантию, что она будет содержать / вернуть достаточное количество строк. Наиболее простым является определить дополнительную таблицу с соответствующим типом данных, соответствующим образом проиндексированным, заполнить его и сослаться на таблицу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню