How to emulate REPEAT() in SQLite

前端 未结 4 2019
情话喂你
情话喂你 2020-12-17 22:09

Most relational databases have some sort of REPEAT() string function, for instance:

SELECT REPEAT(\'abc\', 3)

Would yield

相关标签:
4条回答
  • 2020-12-17 22:27

    My answer combines Shiplu Mokaddim's "printf character substitution repetition" with the "replace" of Steve Broberg and Lukas Eder:

    sqlite> SELECT replace(printf('%.' || 5 || 'c', '/'),'/','My string ');
    My string My string My string My string My string      
    

    It's also easy to derive the number of repetitions from table data. Here's an example using a common table expression:

    sqlite> WITH cte(string, reps) AS
        ..>   (SELECT * FROM (values ('alpha ', 1),('bravo ', 5),('charlie ', 3) ) )
        ..> SELECT *, replace(printf('%.' || reps || 'c', '/'), '/', string) FROM cte;
    alpha       1           alpha
    bravo       5           bravo bravo bravo bravo bravo
    charlie     3           charlie charlie charlie
    
    0 讨论(0)
  • 2020-12-17 22:42

    A simplified version of @Lukas Eder's solution using hex() instead of quote:

    -- X = string
    -- Y = number of repetitions
    
    replace(hex(zeroblob(Y)), '00', X) 
    
    0 讨论(0)
  • 2020-12-17 22:44

    A solution was inspired by this answer to a related question, here:

    How to emulate LPAD/RPAD with SQLite

    I wanted to share this on Stack Overflow, as this may be useful to other SQLite users. The solution goes like this:

    -- X = string
    -- Y = number of repetitions
    
    replace(substr(quote(zeroblob((Y + 1) / 2)), 3, Y), '0', X)
    
    0 讨论(0)
  • 2020-12-17 22:49

    If its a single character you want to repeat, you can use printf function.

    Bellow is an example where * is repeated 10 times.

    sqlite> select printf('%.' || 10 ||'c', '*');
    **********
    

    To repeat multiple characters please see Lukas's answer above.

    0 讨论(0)
提交回复
热议问题