Frage

Wie konnte ich konvertiere eine ganz Woche (zB 0852 oder 200852) in ein Datum (zB 2008-12-31 oder speziell in der Woche endende Tag dh Samstag 2008-12-27 oder eine Woche beginnend Tag dh 2008- 12-21)? An jedem Tag der Woche-Ende tun, Freitag, Samstag, Sonntag oder Montag.

War es hilfreich?

Lösung

MS SQL Server hat DATEADD functionallity das sollte helfen ...

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:

Leider verpassten die wenig über so dass es ein Samstag, etc ...

Wenn Sie den Wert haben, verwenden Sie DATEPART zu bekommen, was Tag der Woche ist, und subtrahiert, dass aus Ihrer Antwort ...

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

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

Dies wird den Wert zu Beginn der Woche bringen, je nachdem, was Sie eingestellt haben DATEFIRST zu.

Andere Tipps

Hier ist eine Lösung, die fast Datenbank unabhängig ist, wenn das ist wichtig.

Erstellen Sie eine Tabelle mit dem Namen ALMANAC, Primärschlüssel DATE, das alle Attribute eines Datums aufgelistet, die Sie über die Verwendung planen. Einer von ihnen YEAR sein könnte, könnte eine weitere Woche. Sie können unabhängig von berechenbaren Funktionen von DATE sind Sie viel verwenden möchten. Sie können auch unternehmensspezifische DATE Attribute, wie umfassen, ob das Datum ist ein Unternehmen Urlaub.

Schreiben Sie ein Programm DATUM bevölkern seit 10 Jahren sagen (etwa 3650 Zeilen plus einige Schaltjahren). Dieses Programm wird die umgebungsspezifischen Datumsfunktionen für Sie entweder in dem DBMS in irgendeiner Programmiersprache verwenden. Sobald Sie die ALMANAC Tabelle aufgefüllt haben, verwenden Sie es wie normale Daten. Schließen Sie sich den Primärschlüssel mit beliebigen Datumsfeldern in Ihrer Datenbank.

Damit wird dafür solche Dinge enorm nützlich sein, wie ein Bericht von Woche, Monat, Quartal durch die Vorbereitung und für Jahr fast automatisch.

Wenn DATE nicht fein genug Granularität ist, können Sie auch den Almanach in kleinere Zeiteinheiten unterteilen, wie Verschiebungen, wo 3 Schichten eines Tages.

Datumsfunktionen sind so ziemlich Datenbank spezifisch. In MySQL zum Beispiel könnten Sie folgendermaßen vorgehen Montag der Woche in ‚YYYYWW‘ Format zu erhalten:

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);

Mit MAKEDATE (links ( 'YYYYWW', 4), 1 + (rechts ( 'YYYYWW', 2) - 1) * 7) würden Sie einen Termin bekommen, die auf jeden Fall in der gegebenen Woche und Jahr, und mit der DATE_SUB Funktion, die wir von dieser Woche an Montag zurück.

Beispiele:

  • für '200906' dies würde zurückkehren ‚2009-02-02
  • für '200901', es würde zurückkehren '2008-12-29' (dies ist in der Tat der Montag der Woche 1 von 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
    )

Wenn dies in Oracle, überprüfen Sie die Funktion TO_DATE mit verschiedenen Optionen aus, YYYYWW. wählen TO_DATE ( '200852' YYYYWW) von dual;

http://www.oradev.com/oracle_date_format.jsp Sobald Sie den begning der Woche erhalten, können Sie immer Anzahl der Tage in dem Wochenende Datum.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top