Es ist einfach genug, um mit substring und Ersetzen-Funktionen varchar als Daten zu werfen und neu gefasst Sie diese Ausgabe erforderlich. zum Beispiel
DROP TABLE T;
CREATE TABLE T (TIMING VARCHAR(20),MO VARCHAR(2));
INSERT INTO T VALUES
('7/11/2016 20:45' ,'AB'),
('7/12/2016 20:45' ,'AB'),
('2016-07-11 00:00','AB'),
('2016-07-12 00:00','AB'),
('27/06/2016 20:45' ,'AB'),
('29/05/2016 20:45' ,'AB')
*/
SELECT *,
CASE
WHEN INSTR(TIMING,'/') = 0 THEN
CASE WHEN INSTR(TIMING,'-') = 5 THEN CAST(TIMING AS DATE)
end
WHEN INSTR(TIMING,'/') = 3 THEN
CAST(
CONCAT(
SUBSTRING(CONCAT('0',TIMING),8,4)
,'-'
,SUBSTRING(CONCAT('0',TIMING),5,2)
,'-'
,SUBSTRING(CONCAT('0',TIMING),1,2)
)
AS DATE
)
WHEN INSTR(TIMING,'/') = 2 THEN
CAST(
CONCAT(
SUBSTRING(CONCAT('0',TIMING),7,4)
,'-'
,SUBSTRING(CONCAT('0',TIMING),4,2)
,'-'
,SUBSTRING(CONCAT('0',TIMING),1,2)
)
AS DATE
)
END
FROM T
Ergebnisse in
-----------------------------------------------------------------------------+
| 7/11/2016 20:45 | AB | 2016-11-07 |
| 7/12/2016 20:45 | AB | 2016-12-07 |
| 2016-07-11 00:00 | AB | 2016-07-11 |
| 2016-07-12 00:00 | AB | 2016-07-12 |
| 27/06/2016 20:45 | AB | 2016-06-02 |
| 29/05/2016 20:45 | AB | 2016-05-02 |
+------------------+------+-----------------------------------------------------
Sie haben für jede bekannte Variante codieren - in diesem Fall habe ich festgestellt habe, dass 2016.07.11 mit Null aufgefüllt links muss und ersetzt Schrägstriche mit Bindestrichen vor der Datumsumwandlung. Hoffentlich haben Sie eine begrenzte Anzahl von Datumsvariationen in Ihrer Quelle, um zu codieren, und Sie werden mit einer großen Frage enden - aber das ist das Leben. Gott Glück,
Warum fügen Sie Datum in 'Varchar' Feld und warum in verschiedenen Formaten? – itzmukeshy7
Die Timing-Spalte wird von mehreren CSVs importiert. Ich habe keine Kontrolle darüber, wie die Zeit in diesen CSV –
bevölkert ist Sie können es in einem gleichen konvertieren, während der Import ... richtig oder nicht? – itzmukeshy7