Discussions
Categories
- 385.5K All Categories
- 5.1K Data
- 2.5K Big Data Appliance
- 2.5K Data Science
- 453.4K Databases
- 223.2K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 47 Multilingual Engine
- 606 MySQL Community Space
- 486 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.2K ORDS, SODA & JSON in the Database
- 584 SQLcl
- 4K SQL Developer Data Modeler
- 188K SQL & PL/SQL
- 21.5K SQL Developer
- 45 Data Integration
- 45 GoldenGate
- 298.4K Development
- 4 Application Development
- 20 Developer Projects
- 166 Programming Languages
- 295K Development Tools
- 150 DevOps
- 3.1K QA/Testing
- 646.7K Java
- 37 Java Learning Subscription
- 37.1K Database Connectivity
- 201 Java Community Process
- 108 Java 25
- 22.2K Java APIs
- 138.3K Java Development Tools
- 165.4K Java EE (Java Enterprise Edition)
- 22 Java Essentials
- 176 Java 8 Questions
- 86K Java Programming
- 82 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 208 Java User Groups
- 25 JavaScript - Nashorn
- Programs
- 666 LiveLabs
- 41 Workshops
- 10.3K Software
- 6.7K Berkeley DB Family
- 3.6K JHeadstart
- 6K Other Languages
- 2.3K Chinese
- 207 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 474 Portuguese
Sql Query to find increment of a number using select Statement

Summary:
I need a select query which should provide me a output with increment for the number (0001). Suggest a query which apt for the below expected output without using Sequence conditions.
Expected output:
TO_CHAR('0001') |
---|
0001 |
0002 |
0003 |
Query:
select to_char('0001') from dual;
Thanks,
Hema.
Answers
-
SQL> SELECT TO_CHAR(LEVEL,'FM0000')
2 FROM DUAL
3 CONNECT BY LEVEL <= 5 -- choose your limit
4 /
TO_C
----
0001
0002
0003
0004
0005
SQL>
SY.
-
This is a script we use on some cases (modified for your output requirements) , you can provide an initial value and the increment.
WITH vData AS (
SELECT 1 AS InitialValue, 1 AS StepIncrement, 5 AS DesiredRows FROM DUAL )
SELECT TO_CHAR(InitialValue + ( (Level - 1) * StepIncrement), '0000')
FROM vData
CONNECT BY Level <= DesiredRows;
-
4141147 wrote:select to_char('0001') from dual;
Pay attention to your datatypes: You're giving to_char a string, while it expects a number or a date. So Oracle implicitly converst your string first to a number, in order to use the to_char function. Don't rely on implicit conversions, ALWAYS pay attention to your datatypes and deal with them properly. If you don't, I can guarantee you that it will come back and bite you at some point in the future.
-
Thanks for the information this is useful for me. Also i need solution , after 0005 it should continue with 0001.
For example :
0001
0002
0003
0004
0005
0001
0002
Thanks,
Hema
-
>select to_char(mod(level - 1, 5) + 1, 'FM0000') val
>from dual
>connect by level <= 15 -- choose your limit
>/
VAL
-----
0001
0002
0003
0004
0005
0001
0002
0003
0004
0005
0001
0002
0003
0004
0005
15 rows selected.
-
4141147 wrote:Thanks for the information this is useful for me. Also i need solution , after 0005 it should continue with 0001.
Generic solution:
WITH DRIVER AS (
SELECT 1 LOWER_BAND,
5 UPPER_BAND,
3 REPEAT_NUMBER
FROM DUAL
)
SELECT TO_CHAR(LOWER_BAND + MOD(LEVEL - 1,UPPER_BAND),'FM0000') N
FROM DRIVER
CONNECT BY LEVEL <= UPPER_BAND * REPEAT_NUMBER
/
N
-----
0001
0002
0003
0004
0005
0001
0002
0003
0004
0005
0001
0002
0003
0004
0005
15 rows selected.
SQL>
SY.
-
Actually it isn't 100% generic since we have hardcoded FM0000. You could do something like:
WITH DRIVER AS (
SELECT 1 LOWER_BAND,
5 UPPER_BAND,
3 REPEAT_NUMBER,
3 MIN_LEADING_ZEROES
FROM DUAL
)
SELECT TO_CHAR(LOWER_BAND + MOD(LEVEL - 1,UPPER_BAND),'FM' || LPAD('0',MIN_LEADING_ZEROES + CEIL(UPPER_BAND / 10),'0')) N
FROM DRIVER
CONNECT BY LEVEL <= UPPER_BAND * REPEAT_NUMBER
/
N
-----
0001
0002
0003
0004
0005
0001
0002
0003
0004
0005
0001
0002
0003
0004
0005
15 rows selected.
SQL>
WITH DRIVER AS (
SELECT 1 LOWER_BAND,
10 UPPER_BAND,
2 REPEAT_NUMBER,
3 MIN_LEADING_ZEROES
FROM DUAL
)
SELECT TO_CHAR(LOWER_BAND + MOD(LEVEL - 1,UPPER_BAND),'FM' || LPAD('0',MIN_LEADING_ZEROES + CEIL(UPPER_BAND / 10),'0')) N
FROM DRIVER
CONNECT BY LEVEL <= UPPER_BAND * REPEAT_NUMBER
/
N
-----
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
20 rows selected.
SQL>
SY.