在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 ... 有人有聪明的解决办法吗在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
我想我可以在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
;