Один из подходов состоит в том, чтобы создать таблицу чисел , которая содержит список чисел, которые вы можете найти в содержимом столбца:
CREATE TABLE numbers( idx INTEGER);
INSERT INTO numbers VALUES(1);
INSERT INTO numbers VALUES(2);
...
INSERT INTO numbers VALUES(10);
Теперь, при условии, что все Значения страницы имеют 7 символов, причем последние 3 являются цифрами, мы можем JOIN
исходную таблицу с таблицей numbers
генерировать отсутствующие записи:
SELECT
CONCAT(
SUBSTRING(t.First_Page, 1, 4),
REPLICATE('0', 3 - LEN(n.idx)),
n.idx
) AS [ALl Pages],
t.id
FROM
mytable t
INNER JOIN numbers n
ON n.idx >= CAST(SUBSTRING(t.First_Page, 5, 3) AS int)
AND n.idx <= CAST(SUBSTRING(t.Last_Page, 5, 3) AS int)
Это демо в DB Fiddle с вашими примерами возвращаемых данных:
ALl Pages | id :-------- | -: ABC_001 | 1 ABC_002 | 1 ABC_003 | 1 ABC_004 | 1 ABC_005 | 2 ABC_006 | 3 ABC_007 | 3 ABC_008 | 3 ABC_009 | 3 ABC_010 | 3
Используйте substr
длиной 1, как в:
$nth = substr($string, n-1, 1);
Также ищите perlmonks для других решений.
Следствие для других ответов substr () состоит в том, что вы можете использовать его для установки значений в индекс также. Он поддерживает это как lvalue или с дополнительными аргументами. Это также очень похоже на соединение, что то же самое, но для массивов.
$string = "hello";
substr($string, 2, 2) = "this works?";
substr($string, 2, 2, "same thing basically");
@a = qw(s t r i n g s a n d t h i n g s);
@cut_out = splice(@a, 2, 2);
@cut_out = splice(@a, 2, 2, @replacement);
$char = substr( $mainstring, $i , 1 );
Это один из способов сделать это, возможно, самый ясный.
Если вам нужно было числовое значение , и вы намеревались сделать следующие лоты:
unpack("W*","hello")
Возвращает массив значений Char:
print join ",", unpack("W*","hello") ;
# 104,101,108,108,111
Для правильного Unicode / Utf8 материала, который вы, возможно, захотите используйте
use utf8;
unpack("U*","hello\0ƀ\n")
# 104,101,108,108,111,0,384,10