Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在oracle中重复给定数量的字符串并计数_Oracle - Fatal编程技术网

在oracle中重复给定数量的字符串并计数

在oracle中重复给定数量的字符串并计数,oracle,Oracle,我试图给我的表一些输入,我还希望它每四行计数一次。 所以W01应该在前四行,但它也应该计数1-4,然后在重复该操作之前跳转到W02 例如: ABC-W01_1 ABC-W01_2 ABC-W01-3 ABC-W01-4 ABC-W02-1 ABC-W02-2 ABC-W02-3 ABC-W02-4 ... 有人有聪明的解决办法吗 我想我可以在excel中创建它并导入它我打赌你的文章有印刷错误,你希望第三个字段前面有破折号,而不是下划线 您需要的是使用dual来处理一些数据,然后让第二个字段是ro

我试图给我的表一些输入,我还希望它每四行计数一次。 所以W01应该在前四行,但它也应该计数1-4,然后在重复该操作之前跳转到W02

例如:

ABC-W01_1 ABC-W01_2 ABC-W01-3 ABC-W01-4 ABC-W02-1 ABC-W02-2 ABC-W02-3 ABC-W02-4 ... 有人有聪明的解决办法吗


我想我可以在excel中创建它并导入它

我打赌你的文章有印刷错误,你希望第三个字段前面有破折号,而不是下划线

您需要的是使用dual来处理一些数据,然后让第二个字段是rownum的函数,第三个字段是rownum的不同函数


看起来第二个字段的宽度打算将行数限制为396。

如果我真的得到了您想要的,那么将输入限制为100行您可以执行以下操作:

  select 'ABC-W' || lpad(ceil(level / 4), 2, '0') || '_' || (1+mod(level-1, 4))
    from dual
 connect by level <= 100

您可以使用它,只需将xx替换为内联视图t1中所需的循环数

选择“ABC-W”|| lpadt1.lvl|u 1,2,“0”| | | | t2.lvl|u 2 从…起
从dual connect by level中选择级别lvl_1这里有一个愚蠢的方法。生成从1到1000的数字;除以10,以十进制格式表示数字,但使用破折号作为小数点。要获取所需的值,请限制使用的数字大于10,并且最后一位数字介于1和4之间

在connect by过程中生成数字,在where子句中过滤数字,在select子句中完成精确的格式设置

或者,更愚蠢的是使用ABC-W作为数字格式的货币符号:

select  to_char(level/10, 'fmL00d9', 
        'nls_currency=ABC-W nls_numeric_characters=-,') as str
from    dual
where   level > 10 and mod(level, 10) between 1 and 4
  and   rownum <= 120  --  Limit to 120 rows; maximum 396 with this format
connect by level <= 1000
;

请注意,虽然这个解决方案确实很愚蠢,但它是100%有效的-没有滥用任何SQL功能,它们都只是以非设计的方式使用。

您希望生成多少行?如果必须固定ABC-W零件,则最多可以生成396行99 x 4,这是否足够?
select  'ABC-W' || 
        to_char(level/10, 'fm00d9', 'nls_numeric_characters=-,') as str
from    dual
where   level > 10 and mod(level, 10) between 1 and 4
  and   rownum <= 120  --  Limit to 120 rows; maximum 396 with this format
connect by level <= 1000
;
select  to_char(level/10, 'fmL00d9', 
        'nls_currency=ABC-W nls_numeric_characters=-,') as str
from    dual
where   level > 10 and mod(level, 10) between 1 and 4
  and   rownum <= 120  --  Limit to 120 rows; maximum 396 with this format
connect by level <= 1000
;