Announcement

Collapse
No announcement yet.

SQL Datumsfragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL Datumsfragen

    Hi,
    Ich habe eine TabelleA mit einer Datetime Spalte nach dem Format:
    (MSSQL 2005)

    '2008-02-05 12:19:21.467'

    Wie bekomme ich dieses Datum in folgendes Format und welchen Spaltentyp müsste ich dann in der Zieltabelle in zwei Spalten verwenden?

    JJJJ.MM.TT
    HH:MM


    Meine zweite Frage ist, wie kann man einen Trigger darauf limitieren, dass er nur Inserts der eingefügten Daten durchführt, wenn die Daten zwischen 8 und 16 Uhr des jeweiligen tages eingefügt werden?
    Zuletzt editiert von schnurzli; 05.02.2008, 13:57.

  • #2
    habe ein wenig probiert...

    Code:
    SELECT *
    FROM TabelleA
    WHERE (datepart(hh, logdate) >= 14 AND datepart(mi, logdate) >= 30) AND 
    (datepart(hh, logdate) <= 15 AND datepart(mi, logdate) <= 30)
    mit den stunden funktioniert das schon recht nett aber mit den minuten bekomme ich ein problem...

    wenn ich als startzeit

    14:30 habe und als endzeit 15:30, dann sehe ich natürlich laut oberem statement leider nur die einträge, die um 14:30 und 15:30 genau passiert sind...

    wie bekomme ich jedoch alle einträge, die in logdate zwischen 14:30 und 15:30 eingetragen sind?

    lg

    Comment


    • #3
      Hallo,

      wie bekomme ich jedoch alle einträge, die in logdate zwischen 14:30 und 15:30 eingetragen sind?
      Das folgende Beispiel demonstiert einen Weg, wie diese WHERE-Einschränkung implementiert werden kann (zum besseren Verständnis geben die beiden lokalen Variablen in der SELECT-Abfrage auch den Bereichsanfang und das Bereichsende der WHERE-Einschränkung mit aus):

      [highlight=SQL]
      USE tempdb
      GO

      CREATE TABLE dbo.DateTimeTest
      (
      id INT NOT NULL IDENTITY PRIMARY KEY,
      datum DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
      )
      GO
      INSERT INTO dbo.DateTimeTest (datum) VALUES ('2008-06-02 14:28:00.000')
      INSERT INTO dbo.DateTimeTest (datum) VALUES ('2008-06-02 14:32:00.000')
      INSERT INTO dbo.DateTimeTest (datum) VALUES ('2008-06-02 15:35:00.000')
      GO
      DECLARE @von DATETIME
      DECLARE @bis DATETIME
      SET @von = CAST(CONVERT(CHAR(8), GETDATE(), 112) AS DATETIME)
      SET @von = DATEADD(hh, 14, @von)
      SET @von = DATEADD(mi, 30, @von)
      SET @bis = CAST(CONVERT(CHAR(8), GETDATE(), 112) AS DATETIME)
      SET @bis = DATEADD(hh, 15, @bis)
      SET @bis = DATEADD(mi, 30, @bis)
      SELECT id, datum, @von AS Bereichsanfang, @bis AS Bereichsende
      FROM dbo.DateTimeTest
      WHERE (datum > @von) AND (datum < @bis)
      GO
      [/highlight]

      Comment


      • #4
        herzlichen dank.
        es funktioniert bereits ausgezeichnet...

        habe jetzt einen insert trigger, welcher zuerst die zeit nach dem schema 12:00 ausliest und dann zerlegt und mit deinem script verbindet:

        Code:
        DECLARE @urvon NVARCHAR(5)
        DECLARE @urbis NVARCHAR(5)
        DECLARE @vona INT
        DECLARE @vonb INT
        DECLARE @bisa INT
        DECLARE @bisb INT
        DECLARE @von DATETIME
        DECLARE @bis DATETIME
        SELECT @urvon = [von], @urbis = [bis] FROM ConfigTable WHERE MA = 'MO'
        SET @vona = SUBSTRING(@urvon ,1 , 2)
        SET @vonb = SUBSTRING(@urvon ,4 , 2)
        SET @bisa = SUBSTRING(@urbis ,1 , 2)
        SET @bisb = SUBSTRING(@urbis ,4 , 2)
        SET @von = CAST(CONVERT(CHAR(8), GETDATE(), 112) AS DATETIME)
        SET @von = DATEADD(hh, @vona, @von)
        SET @von = DATEADD(mi, @vonb, @von)
        SET @bis = CAST(CONVERT(CHAR(8), GETDATE(), 112) AS DATETIME)
        SET @bis = DATEADD(hh, @bisa, @bis)
        SET @bis = DATEADD(mi, @bisb, @bis)
        INSERT INTO tabelleA (ZP, WO, DN, FN, LN, AWN , Hmm) 
        SELECT a.LogDate, a.device, b.number, b.firstname,b.lastname, b.justforfun, 'Test'
        FROM TabelleA AS a INNER JOIN TabelleB AS b ON a.id = b.id
        WHERE (a.LogDate > @von) AND (a.LogDate < @bis)

        Comment

        Working...
        X