Skip to content

Commit fb28a19

Browse files
authored
Create first-letter-capitalization-ii.sql
1 parent 833a304 commit fb28a19

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Time: O(n * l^2 + (n * l) * log(n * l))
2+
# Space: O(n * l^2)
3+
4+
# recursive cte
5+
WITH RECURSIVE splitted_word_cte AS (
6+
SELECT content_id,
7+
content_text,
8+
'^' AS delim,
9+
CASE
10+
WHEN INSTR(content_text, ' ') = 0 AND INSTR(content_text, '-') = 0 THEN
11+
content_text
12+
WHEN INSTR(content_text, ' ') != 0 AND INSTR(content_text, '-') = 0 THEN
13+
SUBSTRING(content_text, 1, INSTR(content_text, ' ') - 1)
14+
WHEN INSTR(content_text, ' ') = 0 AND INSTR(content_text, '-') != 0 THEN
15+
SUBSTRING(content_text, 1, INSTR(content_text, '-') - 1)
16+
WHEN INSTR(content_text, ' ') != 0 AND INSTR(content_text, '-') != 0 THEN
17+
SUBSTRING(content_text, 1, INSTR(content_text, IF(INSTR(content_text, ' ') < INSTR(content_text, '-'), ' ', '-')) - 1)
18+
END AS word,
19+
CASE
20+
WHEN INSTR(content_text, ' ') = 0 AND INSTR(content_text, '-') = 0 THEN
21+
''
22+
WHEN INSTR(content_text, ' ') != 0 AND INSTR(content_text, '-') = 0 THEN
23+
SUBSTRING(content_text, INSTR(content_text, ' '), 255)
24+
WHEN INSTR(content_text, ' ') = 0 AND INSTR(content_text, '-') != 0 THEN
25+
SUBSTRING(content_text, INSTR(content_text, '-'), 255)
26+
WHEN INSTR(content_text, ' ') != 0 AND INSTR(content_text, '-') != 0 THEN
27+
SUBSTRING(content_text, INSTR(content_text, IF(INSTR(content_text, ' ') < INSTR(content_text, '-'), ' ', '-')), 255)
28+
END AS remain,
29+
1 AS idx
30+
FROM user_content
31+
UNION ALL
32+
SELECT
33+
content_id,
34+
content_text,
35+
SUBSTR(remain, 1, 1) AS delim,
36+
CASE
37+
WHEN INSTR(SUBSTRING(remain, 2, 255), ' ') = 0 AND INSTR(SUBSTRING(remain, 2, 255), '-') = 0 THEN
38+
SUBSTRING(remain, 2, 255)
39+
WHEN INSTR(SUBSTRING(remain, 2, 255), ' ') != 0 AND INSTR(SUBSTRING(remain, 2, 255), '-') = 0 THEN
40+
SUBSTRING(SUBSTRING(remain, 2, 255), 1, INSTR(SUBSTRING(remain, 2, 255), ' ') - 1)
41+
WHEN INSTR(SUBSTRING(remain, 2, 255), ' ') = 0 AND INSTR(SUBSTRING(remain, 2, 255), '-') != 0 THEN
42+
SUBSTRING(SUBSTRING(remain, 2, 255), 1, INSTR(SUBSTRING(remain, 2, 255), '-') - 1)
43+
WHEN INSTR(SUBSTRING(remain, 2, 255), ' ') != 0 AND INSTR(SUBSTRING(remain, 2, 255), '-') != 0 THEN
44+
SUBSTRING(SUBSTRING(remain, 2, 255), 1, INSTR(SUBSTRING(remain, 2, 255), IF(INSTR(SUBSTRING(remain, 2, 255), ' ') < INSTR(SUBSTRING(remain, 2, 255), '-'), ' ', '-')) - 1)
45+
END AS word,
46+
CASE
47+
WHEN INSTR(SUBSTRING(remain, 2, 255), ' ') = 0 AND INSTR(SUBSTRING(remain, 2, 255), '-') = 0 THEN
48+
''
49+
WHEN INSTR(SUBSTRING(remain, 2, 255), ' ') != 0 AND INSTR(SUBSTRING(remain, 2, 255), '-') = 0 THEN
50+
SUBSTRING(SUBSTRING(remain, 2, 255), INSTR(SUBSTRING(remain, 2, 255), ' '), 255)
51+
WHEN INSTR(SUBSTRING(remain, 2, 255), ' ') = 0 AND INSTR(SUBSTRING(remain, 2, 255), '-') != 0 THEN
52+
SUBSTRING(SUBSTRING(remain, 2, 255), INSTR(SUBSTRING(remain, 2, 255), '-'), 255)
53+
WHEN INSTR(SUBSTRING(remain, 2, 255), ' ') != 0 AND INSTR(SUBSTRING(remain, 2, 255), '-') != 0 THEN
54+
SUBSTRING(SUBSTRING(remain, 2, 255), INSTR(SUBSTRING(remain, 2, 255), IF(INSTR(SUBSTRING(remain, 2, 255), ' ') < INSTR(SUBSTRING(remain, 2, 255), '-'), ' ', '-')), 255)
55+
END AS remain,
56+
idx + 1
57+
FROM splitted_word_cte
58+
WHERE remain != ''
59+
),
60+
formatted_word_cte AS (
61+
SELECT content_id,
62+
content_text,
63+
idx,
64+
word,
65+
CONCAT(IF(delim = '^', '', delim), UPPER(SUBSTRING(word, 1, 1)), LOWER(SUBSTRING(word, 2, 255))) AS formatted_word
66+
FROM splitted_word_cte
67+
)
68+
69+
SELECT content_id,
70+
content_text AS original_text,
71+
GROUP_CONCAT(formatted_word ORDER BY idx SEPARATOR '') AS converted_text
72+
FROM formatted_word_cte
73+
GROUP BY 1, 2
74+
ORDER BY 1;

0 commit comments

Comments
 (0)