Luk*_*der 7 sql sqlite simulation function
大多数关系数据库都有某种REPEAT()字符串函数,例如:
SELECT REPEAT('abc', 3)
Run Code Online (Sandbox Code Playgroud)
会产量
abcabcabc
Run Code Online (Sandbox Code Playgroud)
另一方面,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)
Run Code Online (Sandbox Code Playgroud)
如果是单个字符要重复,可以使用printf函数。
Bellow 是一个*重复10次数的例子。
sqlite> select printf('%.' || 10 ||'c', '*');
**********
Run Code Online (Sandbox Code Playgroud)
要重复多个字符,请参阅上面 Lukas 的回答。
我的答案结合了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
Run Code Online (Sandbox Code Playgroud)
从表数据中得出重复次数也很容易。以下是使用公用表表达式的示例:
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
Run Code Online (Sandbox Code Playgroud)