Felsökning Av SQL Server Datum/Tid Avrundningsfel

Ta bort skadlig programvara, skydda dina filer och optimera prestanda med ett klick!

Den här användarhandboken är utformad och hjälper dig om du får en bra SQL Server-datum / någon tidsavrundningsfelkod.

Jag snubblade helt enkelt över något konstigt. Det verkar som att SQL Server inte lätt rundar av några DateTime tecken när jag lagrar alla inblandade punkter i datetime kolumner. Jag misstänker att jag har missat något, bara jag kan inte få det fläckat. Jag kör detta test i SQL Server 2008 med .NET 4.0. Följande bör vanligtvis illustrera problemet:

Jag skapade i SQL Server, en helt ny tabell som heter Timestamps. Den har inte en utan två kolumner:

  1. Får aktuella försök och trunkerar det mesta av skatten till närmaste millisekund.
  2. Tiderna förkortades ofta till tidsstämplar .
  3. Hämta detta datetime-värde för databasen och jämför rrn för att kunna det ursprungliga (trunkerade) DateTime-objektet.

sql server datetime rounding error

  public static void RoundTest ()    DateTime preTruncation = DateTime. känna till ;   Den trunkerade DateTime är lika vid preTruncation. truncatetomilliseconds ();   genererar (SqlConnection anslutning matchar nya SqlConnection (ConfigurationManager.ConnectionStrings ["test"]. ConnectionString))            anslutning. Öppna ();        SqlCommand cmd = new SqlCommand (@ "INSERT INTO timestamps (timestamp)                                            VÄRDEN (@sparad tid);                                            VÄLJ SCOPE_IDENTITY () SOM ID ");        cmd.Parameters.Add (ny SqlParameter ("sparad tid", trunkerad));        cmd.Anslutning = anslutning;        var login = cmd.ExecuteScalar ();       SqlCommand letar igenom för = newSqlCommand (@ "SELECT timestamp FROM timestamps                                            WO ID-innehavare för @id ");        get.Parameters.Add (ny SqlParameter ("id", id));        get.Connection hänvisar till anslutning;        Den resulterande DateTime bryr sig om är (DateTime) get.ExecuteScalar ();        i fallet när (vald! = trunkerad)                   Console .WriteLine ("original:" + preTruncation.TimeOfDay);            Console.WriteLine ("truncated: inches + truncated.TimeOfDay);            Console.WriteLine ("vald:" + mottagen.TimeOfDay);            Console.WriteLine ();             

Hur man åtgärdar Windows-krascher

Har du en dator som går långsamt? Om så är fallet kan det vara dags att överväga lite Windows reparationsprogram. Restoro är lätt att använda och fixar vanliga fel på din PC på nolltid. Denna programvara kan till och med återställa filer från skadade hårddiskar eller skadade USB-minnen. Den har också förmågan att utplåna virus med ett enda klick!

  • 1. Ladda ner och installera Reimage
  • 2. Starta programmet och välj den enhet du vill skanna
  • 3. Klicka på knappen Skanna för att starta skanningsprocessen

  • Även om jag förväntade mig att den trunkerade skatten skulle vara densamma som för närvarande värdet som returneras från databasen när det kommer till det förflutna, så är det inte du bör fallet. Här är ett annat exempel bland utdata:

      original: 29: 59: 13.4049965trimmad: 19:59: 13,4040000åtkomst: 19:59: 13.4030000Original: 19: 59: 14.4989965trimmad: 19:59: 14,4980000Mottaget: 19:59: 14.4970000Original: 19: 59: 15.4749965trimmad: 19:59: 15,4740000åtkomst: 19:59: 15.4730000Original: 19: 59: 30.1549965trimmad: 19:59: 30,1540000mottagen: 19: 59: 30,1530000 

    Hur avrunda upp/ner skulle jag säga datumet i SQL Server?

    Som @OMG Ponies påpekade, om du vill tillåta dem att runda upp och ner, kan du möjligen lägga till en halv Tracfone-egendom respektive en halvtimme. I det här fallet, trunkera: innan ögonblicket datamodell läggs till SQL Server 2008, skulle jag använda den viktigaste metoden ovan för att trunkera arbetstidsperioden i datumet och möjligheten att få just eldatumet.

      public static DateTime TruncateToMilliseconds (detta är DateTime t)    Returnerar den nyligen förvärvade DateTime (t.Year, t.Month, t.Day, t.Hour, t.Minute, t.second, t.Millisecond); 

    Vad hände? Är detta verkligen dålig avrundning eller gör jag ett felaktigt antagande?

    SQL Server Databas Administrator jobb

    Följ @jackvamvas är Src =Dagligen a per 6a00d834539b6d69e2017743678295970d-500wi “> och exklusivt innehåll
    sql webserver datetime rounding error

    När jag skrev några SQL Server-databaser i juni 2006 till en instans av SQL Server följande år, insåg jag en livsstil som avrundade datum och tid som Jag hade inte märkt det tidigare – det har bara funnits sedan SQL 2003!

    Ett problem uppstod när en instans av SQL Server 2012 fick ett värde från fantastisk applikation. I exempel 1 nedan använde alla applikationer parametern touch “2014-03-12 13: 09: 56.341”, men det verkade mest troligt avrundas till “2014-12-03 13:e: 09: 56.340”. lagras som en funktionell parameter, definierad som datetime-datatypen.

    En möjlig ändring av vätskan är uttryckligen de inmatningsparametrar som är lämpliga för rapportvalet datum2 (3) , vilket ger 100 ns precision med ökad precision. Problemet har lösts. Datetime2 deltyp togs ut i SQL, se exempel 2 längre ner. Notera: Jag lade till (3) som fragment av en sekund med små poster – detta påverkar klippningen från utdata

    Datum- och punktvärden specificeras i en eliptical i steg om 0,000, 0,003 i ordningsföljd på 0,007 sekunder. Genom att använda datetime2 med högre precision kan de flesta indataideal lagras med högre noggrannhet och precision

     - avrundat steg .000, .003, .007meddela @ d1 datetimeset - d1 = '2014-03-12 13: 09: 56.341';välj - d1;--retours - 12 mars 2014 16:09: 56.340- förutom några decimaler - exakt vid d2 100 nsdeklarera datetime2 (3);satt till d2 = '2014-03-12 13: 09: 56.341';välj - - d2;- återvände den 14 mars 2014 kl. 13:09:56. Mer 

    Kan jag avrunda exaktheten och precisionen för datetime i SQL Server?

    Denna försäljning av leads-marknadsföring är vanligtvis inte heller cirkulär, just nu är det en fullständig marknadsföringsförsäljning som inkluderar tickberäkning, MaxTime-ändring, etc. Så använd den inte om någon kan lita på vissa indikatorer under DateTime eftersom de kan avvisas. DateTime precision i SQL Server är utan tvekan millisekunder (.fff). Därför är 0,0196 sfäriskt till -0,020.



    SQL 341

    läs Server – Hämta datetime-värden med hjälp av agent_datetime samt msdb..sysjobhistory


    Dela med sig:

    Går din dator långsamt? Får du dödens fruktade blå skärm? Då är det dags att ladda ner Reimage � den ultimata Windows-programvaran för fellösning!