2016-07-04 80 views
0

Ich habe Daten mit ein paar Spalten. Einer von ihnen (Col1) ist eine Varchar-Variable.Konvertiere eine Varchar-Variable in eine Datetime-Variable

Ich werde eine Probe von wenigen Werten geben:

Col1: 
'2013-01-01 00:00:00:000' 
NULL 
'2013-01-01 00:00:00:000' 

I'n den Entwurf versuche ich den Datentyp aus einer varchar-Variablen in ein Datetime-Variable zu ändern, und es wirft mir einen Fehler :

"Unable to modify table. conversion failed when converting date and/or time from a character string". 

Irgendwelche Vorschläge, um das Problem zu entfernen?

+0

Zeigen Sie uns, was Sie – StackUser

+0

versucht, Sie müssen – Squirrel

+0

schlechte Daten Vielleicht: SELECT CONVERT (datetime, '2013-01-01 00: 00: 00: 000') –

Antwort

0

Sie müssen den Varchar zu Datetime konvertieren. Sie können die Cast- oder Convert-Funktion verwenden. Sie sollten Ihren Datumswert in einem geeigneten Format in Ihrer Varchar-Spalte speichern.

Ich nehme an, Sie verwenden SQL Server 2012

wie diese versuchen,

DECLARE @d TABLE (col1 VARCHAR(50)) 

INSERT INTO @d 
VALUES ('2013-01-01 00:00:00:000') 
    ,(NULL) 
    ,('2013-01-01 00:00:00:000') 

SELECT convert(DATETIME, Col1) AS DATE 

Falls die obige Abfrage gibt Fehler, dann können Sie try_convert-Funktion verwenden. (dies würde Ihre schlechten Formatdaten ignorieren) Hinweis: Sie sollten die notwendigen Maßnahmen zu Ihren schlechten Daten ergreifen.

SELECT try_convert(DATETIME, Col1) AS DATE 
FROM @d 
FROM @d 
0

können Sie ISDATE() verwenden, um die Datumsspalten zu filtern und einfach CAST die Säule.

In der MSDN beschreibt es als

Returns 1 if the expression is a valid date, time, or datetime value; otherwise, 0.

Beispiel Ausführung mit gegebenen Daten:

DECLARE @TestTable TABLE (Col1 VARCHAR(50)) 

INSERT INTO @TestTable (Col1) VALUES 
('2013-01-01 00:00:00:000'), 
(NULL), 
('2013-01-01 00:00:00:000'); 

SELECT CAST(Col1 AS DATETIME) 
FROM @TestTable 
WHERE ISDATE(Col1) = 1 

Ausgang:

Col1 
------------------------ 
2013-01-01 00:00:00:000 
2013-01-01 00:00:00:000 
0

Hallo @ Jordan1200 wie oben die vorgeschlagene folgende sollte eine sein schnelle und einfache Lösung; so etwas wie dies hilft Ihnen

CAST(Col1 AS DATETIME) AS Col1 
+0

Bearbeiten - Ich habe es behoben. { Es wirft mich immer den Fehler. Ich habe bemerkt, dass die Daten den Nullwert weder als 'NULL' noch als '' 'erkennen und ich kann nicht nur den Nullwert in Spalte 1 extrahieren. Weiß jemand warum?} – Jordan1200

+0

Das scheint seltsam @ Jordan1200. Ich habe mir gerade einige meiner Zwischenansichten angeschaut, wo ich meine ETL ausführe und es gibt definitiv Spalten, die zuvor vom Datentyp 'varchar (120)' waren, die ich als 'DATUM' umgewandelt habe. . Die gleiche Spalte enthält auch definitiv Nullwerte. Tut mir leid, ich kann nicht mehr von unmittelbarer Hilfe sein. Ich werde nachdenken. – NHier1992