Domanda

Come posso convertire un anno-settimana (ad esempio 0852 o 200852) in una data (ad esempio 2008-12-31 o in particolare un giorno di fine settimana, ad esempio sabato 2008-12-27 o un giorno di inizio settimana, ad esempio 2008-12-21 ) ?Va bene qualsiasi giorno del fine settimana, venerdì, sabato, domenica o lunedì.

È stato utile?

Soluzione

MS SQL Server è DATEADD functionallity che dovrebbe aiutare ...

DECLARE @date_string NCHAR(6)
SELECT  @date_string = N'200852'

SELECT DATEADD(
           WEEK,
           CAST(RIGHT(@date_string, 2) AS INT),
           DATEADD(
               YEAR,
               CAST(LEFT(@date_string, 4) AS INT) - 1900,
               0
           )
       )

EDIT:

Siamo spiacenti, perse il bit di fare un sabato, etc ...

Una volta ottenuto il valore, utilizzare DATEPART per ottenere ciò che giorno della settimana è, e sottrarre che dal vostro risposta ...

DECLARE @new_date DATETIME
SELECT  @new_date = '2008 Dec 30'

SELECT DATEADD(DAY, 1-DATEPART(dw, @new_date), @new_date)

Questo porterà il valore per l'inizio della settimana, a seconda di ciò che si è impostato per DATEFIRST.

Altri suggerimenti

Ecco una soluzione che è quasi indipendente dal database, se questo è importante.

Creare una tabella denominata ALMANACCO, DATA chiave primaria, in cui sono elencati tutti gli attributi di una data che si prevede di utilizzare. Uno di loro potrebbe essere anno, un altro potrebbe essere SETTIMANA. È possibile includere tutto ciò funzioni calcolabili di data che si desidera usare un sacco. Si potrebbe anche includere aziendali specifici attributi DATA, come se la data è una festa aziendale.

Scrivi un programma per popolare DATA per dire 10 anni (circa 3650 file più alcuni anni bisestili). Questo programma utilizzerà l'ambiente specifiche funzioni data a vostra disposizione sia nel DBMS di in qualche linguaggio di programmazione. Una volta che hai popolato la tabella di almanacco, utilizzarlo come dati ordinari. Partecipa alla chiave primaria con tutti i campi data nel database.

Questo si rivela estremamente utile per fare cose come preparare un rapporto per settimana, per mese, per trimestre, e per anno, quasi automaticamente.

Se la data non va bene abbastanza granularità, si può anche dividere l'almanacco in unità più piccole di tempo, come i turni in cui 3 turni è di un giorno.

Le funzioni di data sono praticamente specifiche del database.In MySQL, ad esempio, potresti fare quanto segue per ottenere il lunedì della settimana nel formato "AAAAWW":

select date_sub(makedate(left('YYYYWW', 4), 1 + (right('YYYYWW', 2) - 1) * 7), 
interval weekday(makedate(left('YYYYWW', 4), 1 + (right('YYYYWW', 2) - 1) * 7)) DAY);

Con makedate(left('YYYYWW', 4), 1 + (right('YYYYWW', 2) - 1) * 7) otterresti una data che è sicuramente nella settimana e nell'anno indicati, e con la funzione date_sub noi tornare al lunedì di quella settimana.

Esempi:

  • per "200906" restituirebbe "2009-02-02".
  • per '200901' restituirebbe '2008-12-29' (questo è infatti il ​​lunedì della settimana 1 del 2009)

In Oracle:

SELECT  TO_DATE('04.01.' || SUBSTR(iso, 1, 4)) + (TO_NUMBER(SUBSTR(iso, 5, 2))) * 7 - TO_CHAR(TO_DATE('04.01.' || SUBSTR(iso, 1, 4)), 'D')
FROM    (
    SELECT  '200101' AS iso
    FROM    dual
    )

Se questo è in Oracle, controlla la funzione TO_DATE con varie opzioni, YYYYWW. selezionare to_date ( '200.852' YYYYWW) da doppio;

http://www.oradev.com/oracle_date_format.jsp Una volta che il begning della settimana, si può sempre aggiungere il numero di giorni per ottenere la data di fine settimana.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top