Generating a range of numbers in MySQL

前端 未结 11 1853
一个人的身影
一个人的身影 2020-11-22 15:07

How do I generate a range of consecutive numbers (one per line) from a MySQL query so that I can insert them into a table?

For example:

nr
1
2
3
4
5
         


        
11条回答
  •  一个人的身影
    2020-11-22 15:55

    The idea I want to share is not a precise response for the question but can be useful for some so I would like to share it.

    If you frequently need only a limited set of numbers then it can be beneficial to create a table with the numbers you may need and just use that table every time. For example:

    CREATE TABLE _numbers (num int);
    INSERT _numbers VALUES (0), (1), (2), (3), ...;
    

    This can be applied only if you need numbers below a certain reasonable limit, so don't use it for generating sequence 1...1 million but can be used for numbers 1...10k, for example.

    If you have this list of numbers in the _numbers table then you can write queries like this, for obtaining the individual characters of a string:

    SELECT number, substr(name, num, 1) 
        FROM users
        JOIN _numbers ON num < length(name)
        WHERE user_id = 1234
        ORDER BY num;
    

    If you need larger numbers than 10k then you can join the table to itself:

    SELECT n1.num * 10000 + n2.num
        FROM _numbers n1
        JOIN _numbers n2
        WHERE n1 < 100 
        ORDER BY n1.num * 10000 + n2.num; -- or just ORDER BY 1 meaning the first column
    

提交回复
热议问题