2016-07-09 2 views
0

Ich habe eine Spalte mit dem Namen DATEOFORDER, deren Typ NUMBER(38) ist.Oracle SQL - YYYYMM aus YYYYMMDD extrahieren, wenn der Spaltentyp NUMBER (38) ist

Wenn ich eine SELECT-Abfrage ausführen, bekomme ich Jahr-Monat-Tag Ergebnisse wie:

20161230, 20160531 oder 20170330

Was ich hoffe, zu erreichen ist die Anzahl der Zeichen zu begrenzen, Nur Jahr-Monat angezeigt.

201612, 201605 oder 201703

ich müde mit Funktionen wie TO_CHAR oder EXTRACT aber ohne Erfolg: So würde ich das folgende erhalten.

Antwort

3

Sie können immer teilen, indem er 100 zum Entfernen der letzten 2 Ziffern. So etwas wie dies funktionieren könnte:

select to_char(trunc(dateoforder/100)) 
    from tbl 
+0

Das hat perfekt funktioniert. Dankesehr. – Blase

1

Oracle-Setup:

CREATE TABLE your_table (dateoforder) AS 
SELECT '20161230, 20160531 or 20170330' FROM DUAL UNION ALL 
SELECT '20161230' FROM DUAL UNION ALL 
SELECT '20160531' FROM DUAL UNION ALL 
SELECT '20170330' FROM DUAL; 

Abfrage:

SELECT REGEXP_REPLACE(dateoforder, '(\d{6})\d{2}', '\1') AS monthoforder 
FROM your_table 

Ausgang:

MONTHOFORDER 
------------------------ 
201612, 201605 or 201703 
201612 
201605 
201703 
+0

Vielen Dank für die schnelle Antwort. Leider bekomme ich eine Fehlermeldung: _ORA-00904: "REGEXP_REPLACE": ungültiger Bezeichner_. – Blase

+0

Was war die Abfrage, die Sie ausgeführt haben? Das obige funktioniert ohne Fehler, wenn es wortwörtlich kopiert wird. Dies ist die [Oracle Dokumentation für 'REGEXP_REPLACE'] (https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm). – MT0

+0

Ich bin ein Anfänger, der erst seit kurzem mit SQL arbeitet. Es ist also sehr wahrscheinlich, dass ich etwas falsch gemacht habe. Vielen Dank für die Antwort auf meinen Beitrag. – Blase

1
select substr(to_char(dateoforder), 1, 6) from tbl 
+0

Das ist zu funktionierte! Vielen Dank. – Blase

0

Sie substr(string, a,b) Operator verwenden sollen, die eine Teil von string mit Werten zwischen a auswählt und b als mathguy vorgeschlagen.

Um die Zeichenfolge zu erhalten, sollten Sie to_char auf dateoorder verwenden.

Verwandte Themen