2013-05-13 26 views
13

Mam kolumny transdate typu VARCHAR2, który posiada następujące przystawkiJak wyodrębnić numer tygodnia w sql

01/02/2012 
01/03/2012 

itp

I konwertowane go do formatu daty w innej kolumnie za pomocą funkcji TO_DATE. To jest ten format, który mam.

01-JAN-2012 
03-APR-2012 

Kiedy próbuję wyodrębnić weekno, otrzymuję wszystkie wartości null.

wybierz to_char (to_date (TRANSDATE), "w") jako weekno od nazwy tabeli.

null 
null 

Jak uzyskać tygodniowo od daty w powyższym formacie?

+12

Nigdy, nigdy, w żadnych dat sklepowych okoliczność w 'kolumn varchar'. Po prostu nie rób tego. –

Odpowiedz

45

Po konwersji datę varchar2 do prawdziwego date typ danych, a następnie przekształcić z powrotem do varchar2 z żądaną maskę:

to_char(to_date('01/02/2012','MM/DD/YYYY'),'WW') 

Jeśli chcesz numer tygodnia w number typu danych, można zawijać instrukcję w obiekcie to_number():

to_number(to_char(to_date('01/02/2012','MM/DD/YYYY'),'WW')) 

Masz jednak kilka tygodniu opcje numer do rozważenia:

WW Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year. 
W Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh. 
IW Week of year (1-52 or 1-53) based on the ISO standard. 
+0

Więc nie mogę dostać weekno bezpośrednio z kolumny, której format to '01-JAN-12'? – user2133404

+0

@ user2133404 Jeśli ta kolumna jest typem danych "data", to tak, w takim przypadku wystarczy wywołać w kolumnie 'to_char (my_column, 'WW')' lub z żądaną maską formatu. Jeśli ta kolumna nie jest prawdziwym typem daty "date", to polegasz na niejawnej konwersji na 'date' (jeśli pasuje do twojego' NLS_DATE_FORMAT'), która nie jest idealna. – Wolf

+0

chcemy niedziela do soboty jako jeden tydzień, a następnie, jak uzyskać numer tygodnia? w powyższej kwerendzie od poniedziałku do niedzieli wliczając jeden tydzień: –

2

Spróbuj zastąpić "w" jako "iw". Na przykład:

SELECT to_char(to_date(TRANSDATE, 'dd-mm-yyyy'), 'iw') as weeknumber from YOUR_TABLE; 
+0

Nadal uzyskiwanie wartości null, myślę, że wartość numeryczna na miesiąc jest przyczyną błędu? – user2133404

+0

chcemy od niedzieli do soboty jako jeden tydzień, a następnie jak uzyskać numer tygodnia? w powyższej kwerendzie od poniedziałku do niedzieli wliczone jest za tydzień –

-1

Zastosowanie 'dd-mon-yyyy' jeśli używasz 2nd format daty określonej w swojej odpowiedzi. Ex:

to_date(<column name>,'dd-mon-yyyy') 
0
Select last_name, round (sysdate-hire_date)/7,0) as tuner 
    from employees 
    Where department_id = 90 
    order by last_name; 
+6

Witamy w ** Stack Overflow **, publikuj odpowiedzi, wyjaśnij i wyjaśnij, dlaczego działają, aby ludzie mogli się z nich uczyć, dziękuję . –

+0

Ten fragment kodu może rozwiązać problem, ale nie wyjaśnia, dlaczego i w jaki sposób odpowiada na pytanie. Proszę [załączyć wyjaśnienie swojego kodu] (// meta.stackexchange.com/q/114762/269535), ponieważ to naprawdę pomaga poprawić jakość twojego posta.Pamiętaj, że odpowiadasz na pytanie przeznaczone dla czytelników w przyszłości, a te osoby mogą nie znać powodów sugestii dotyczących kodu. ** Oznaczniki/recenzenci: ** [tylko dla odpowiedzi typu "tylko hasło", nie usuwaj!] (// meta.stackoverflow.com/a/260413/2747593) –

Powiązane problemy