「以下について教えてあげよう♪」・・・SQL で
「以下について教えてあげよう♪」 - ...ing logging 3.0 経由、以下について教えてあげよう♪
書いてみた。やっぱり SQL で。
WITH Input(id, str) AS ( SELECT 1, 'Abc012_59F_#012Gh' ) , Transform(id, res, input_str) AS ( SELECT id , CAST('' AS varchar(max)) , str FROM Input UNION ALL SELECT id , res + CASE WHEN LEFT(input_str, 1) = '#' THEN input_str WHEN LEFT(input_str, 1) LIKE '[0-9]' THEN CAST(9 - CAST(LEFT(input_str, 1) AS int) AS char(1)) ELSE LOWER(LEFT(input_str, 1)) END , CASE LEFT(input_str, 1) WHEN '#' THEN '' ELSE SUBSTRING(input_str, 2, LEN(input_str)) END FROM Transform WHERE input_str <> '' ) , Result(id, val) AS ( SELECT id , res FROM Transform WHERE input_str = '' ) SELECT id , val FROM Result ORDER BY id
なんかもういろいろとダメかもしれんね...orz
あ、途中結果はこんな感じ。
id | res | input_str |
---|---|---|
1 | Abc012_59F_#012Gh | |
1 | a | bc012_59F_#012Gh |
1 | ab | c012_59F_#012Gh |
1 | abc | 012_59F_#012Gh |
1 | abc9 | 12_59F_#012Gh |
1 | abc98 | 2_59F_#012Gh |
1 | abc987 | _59F_#012Gh |
1 | abc987_ | 59F_#012Gh |
1 | abc987_4 | 9F_#012Gh |
1 | abc987_40 | F_#012Gh |
1 | abc987_40f | _#012Gh |
1 | abc987_40f_ | #012Gh |
1 | abc987_40f_#012Gh |