Zetten Varchar Kolom Datetime formaat – SQL Server

Ik heb een tabel met gegevens die zijn geïmporteerd uit CSV-als volgt:

FirstTimeTaken      LatestTimeTaken     Market                  Outcome         Odds    NumberOfBets    VolumeMatched   InPlay
03/08/2013 15:30:14 03/08/2013 15:32:28 Over/Under 3.5 Goals    Over 3.5 Goals  5       10              118             1
03/08/2013 14:26:40 03/08/2013 14:29:43 Correct Score           0 - 0           7       12              279             1
03/08/2013 15:15:34 03/08/2013 15:27:39 Match Odds              Barnsley        110     7               9               1
28/07/2013 16:57:26 29/07/2013 21:35:55 Match Odds              Barnsley        3       9               35              0

Ik had voor het importeren van de eerste 2 kolommen in varchar formaat omdat ik er fouten probeert te importeren als datetime. Nu heb ik de gegevens in een tabel, moet ik om te zetten in de Kolom-indeling van Varchar te Datetime. Ik heb geprobeerd:

ALTER TABLE #CSVTest_Data
ALTER COLUMN FirstTimeTaken DATETIME
ALTER TABLE #CSVTest_Data
ALTER COLUMN LatestTimeTaken DATETIME

Dit resulteert in een fout: ‘De conversie van een varchar gegevenstype het gegevenstype datetime resulteerde in een out-of-range-waarde’.
Ik weet dat het verwijderen van de laatste rij met gegevens krijgt ontdoen van het probleem, dus ik vermoed dat het systeem denkt dat de datumnotatie MM/DD/JJJJ overwegende dat het eigenlijk DD/MM/JJJJ.
De volgende query werkt prima:

SELECT convert(VARCHAR(50),FirstTimeTaken,105) from #CSVTest_Data 
SELECT convert(VARCHAR(50),LatestTimeTaken,105) from #CSVTest_Data

Maar deze niet omzet in de kolom formaat voor datum en tijd. Ik zou graag wat informatie over hoe dit te doen. Bedankt.

  • Welke methode gebruikt u om deze te importeren?
  • Een eenvoudige Cast(FirstTimeTaken as datetime) zou moeten doen de truc, als alle velden zijn opgemaakt zoals we zien.
  • Ik denk dat dit niet werkt: SELECT CAST('28/07/2013 16:57:26' AS DATETIME). Tenminste, niet in het op de omgeving.
  • Jonas antwoord maakt veel meer zin om me nu. Niet zeker wat er gebeurd met mijn begrijpend lezen vaardigheden….
InformationsquelleAutor Steve W | 2014-03-19

 

2 Replies
  1. 4

    Probeer SET DATEFORMAT.

    SET DATEFORMAT dmy
    • Ik heb je toegevoegd regel code in voordat mijn ALTER KOLOM opdrachten en het werkte perfect. Ik heb zelfs een commentaar-regel in de lijn van de code na de eerste run en alles werkt nog steeds prima. Is dat de code permanent gewijzigd mijn instellingen?
    • Ja, je zou kunnen uitvoeren SET DATEFORMAT mdy zodra je klaar bent om te resetten.
    • Ik ben in het verenigd koninkrijk, dus ik verwacht dat deze moet worden ingesteld als DMY permanent. Bedankt
    • Ik ontdekte dat na het afmelden en weer op, DATEFORMAT was verloren en moest opnieuw worden ingesteld. De truc om dit op te lossen permanent is selecteer Security (beveiliging)–>Aanmeldingen in de Object Explorer. Zoek vervolgens de gebruiker en klik rechts op eigenschappen. Op de onderkant zie je de Standaard Taal. Dit veranderen naar het engels geeft me een permanente oplossing.
  2. 2

    Kunt u de gegevens van uw #Temp tabel als volgt:

    SELECT 
        CONVERT(DATETIME, FirstTimeTaken, 103 ),
        CONVERT(DATETIME, LatestTimeTaken, 103)
    FROM #CSVTest_Data

    Dit geeft de velden van het gegevenstype DATETIME. Van daar, doen wat u wilt.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *