大多数关系数据库都有某种REPEAT()
字符串函数,例如:
SELECT REPEAT('abc', 3)
会产生
abcabcabc
另一方面,SQLite 的功能集非常有限。SQLite 支持的函数在这里列出:
http://www.sqlite.org/lang_corefunc.html
可以REPEAT()
用 SQLite 中可用的功能进行模拟吗?
大多数关系数据库都有某种REPEAT()
字符串函数,例如:
SELECT REPEAT('abc', 3)
会产生
abcabcabc
另一方面,SQLite 的功能集非常有限。SQLite 支持的函数在这里列出:
http://www.sqlite.org/lang_corefunc.html
可以REPEAT()
用 SQLite 中可用的功能进行模拟吗?
一个解决方案的灵感来自这个对相关问题的回答,这里:
我想在 Stack Overflow 上分享这个,因为这可能对其他 SQLite 用户有用。解决方案是这样的:
-- X = string
-- Y = number of repetitions
replace(substr(quote(zeroblob((Y + 1) / 2)), 3, Y), '0', X)
如果要重复单个字符,可以使用printf
函数。
贝娄是一个*
重复10
次数的例子。
sqlite> select printf('%.' || 10 ||'c', '*');
**********
要重复多个字符,请参阅上面 Lukas 的回答。
@Lukas Eder 使用 hex() 而不是引号的解决方案的简化版本:
-- X = string
-- Y = number of repetitions
replace(hex(zeroblob(Y)), '00', X)
我的回答结合了Shiplu Mokaddim 的 “printf 字符替换重复”与Steve Broberg和Lukas Eder的“替换” :
sqlite> SELECT replace(printf('%.' || 5 || 'c', '/'),'/','My string ');
My string My string My string My string My string
从表数据中推导出重复次数也很容易。下面是一个使用公用表表达式的示例:
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