SQL INTO OUTFILE mit Zeitstempel

Hi wie kann man einen Zeitstempel beim File Export in SQL hinzufügen?

Hier ist ein Bsp dafür, welches nicht funktioniert:
INTO OUTFILE concat(‚C:\file‘,current_date,’.csv’) fields TERMINATED BY „;“ lines TERMINATED BY „\n“;

Hallo,

du könntest in das Concat ein GETDATE() stecken.

Gruß,
Steve

Ich hatte Langeweile.
Ich habe „ChatGPT“ gefragt.

Hier die Antwort:

"Um einen Zeitstempel beim Exportieren von Daten aus einer SQL-Datenbank hinzuzufügen, können Sie die Funktion GETDATE() oder CURRENT_TIMESTAMP verwenden, die das aktuelle Datum und die aktuelle Uhrzeit zurückgibt.

Je nachdem, welche Art von Export Sie durchführen, können Sie den Zeitstempel in verschiedenen Formaten hinzufügen. Wenn Sie beispielsweise eine CSV-Datei exportieren, können Sie das Datum und die Uhrzeit als separaten Spaltenwert hinzufügen, indem Sie die Abfrage so schreiben:

SELECT column1, column2, GETDATE() AS timestamp
FROM table_name

In diesem Beispiel fügt die GETDATE() -Funktion einen Zeitstempel als Wert für die Spalte „timestamp“ hinzu.

Wenn Sie Daten in eine Textdatei exportieren, können Sie das Datum und die Uhrzeit als Teil des Dateinamens hinzufügen, indem Sie die Abfrage so schreiben:

DECLARE @timestamp VARCHAR(20)
SET @timestamp = REPLACE(REPLACE(CONVERT(VARCHAR(19), GETDATE(), 120), '-', ''), ' ', '_') + '00'
SELECT column1, column2
FROM table_name
INTO OUTFILE 'export_' + @timestamp + '.txt'

In diesem Beispiel wird der Zeitstempel als Teil des Dateinamens im Format „JJJMMMDD_hhmmss“ (z. B. „2023Mar01_155023“) erstellt und der Textinhalt wird in eine Datei mit diesem Namen exportiert.

Die genauen Schritte für den Export mit Zeitstempel können je nach Datenbankmanagementsystem und Exportmethode variieren."

Für mich ist das alles Bahnhof. Ergibt das einen Sinn? (Bitte sag „nein“, sonst habe ich Angst)

Danke ich hab zwei unterschiedliche Versionen probiert.

Version A - deine Version:
INTO OUTFILE ‚C:\file‘+‚txt Date‘+’.csv’ fields TERMINATED BY „;“ lines TERMINATED BY „\n“;

Error Msg: #1064 - You have an error for the right syntax to use near 'DECLARE @timestamp VARCHAR(20)

Weitere Version
INTO OUTFILE ‚C:\file‘+‚txt Date‘+’.csv’ fields TERMINATED BY „;“ lines TERMINATED BY „\n“;

Error Msg: #1064 - You have an error in your SQL syntax;

Was habe ich falsch gemacht?
Declare @timestamp habe ich nur kopiert von deiner Beschreibung

Ich bitte ernsthaft um Entschuldigung, dass du meinen Beitrag als ernst gemeinten Vorschlag verstanden hast.
ChatGPT ist eine Maschine, die als „künstliche Intelligenz“ bezeichnet wird.
Ich war völlig überrascht, dass diese in der Lage war, eine Antwort mit einem Code zu geben.
Keinesfalls war es meine Absicht, dich zu täuschen - ich wollte tatsächlich nur wissen, ob dieser Roboter allen Ernstes Programmierttätigkeiten ausführen kann.

Falls eine Maschine in der Lage ist, selber Code zu schreiben und dieser dann auch noch richtig funktioniert, wäre ich erschrocken, erstatunt und beängstigt zugleich.

Danke, aber die Lsg suche ich immer noch.

@steve_m hat doch schon den entscheidenden Hinweis gegeben und der Chatbot hat das im zweiten Beispiel detailliert ausgeführt. Wenn es jetzt nicht klappt, dann kann es am SQL- Dialekt (MySql, Postgres. SQLite,…) liegen, den du verwendest und den du zumindest in diesem Thread nicht erwähnt hast.

Fang doch klein an und versuche erst mal den Zeitstempel in eine Variable abzulegen.

Ich hab einige Artikel gefunden, das concate nicht funktioniert.
Daher glaub ich das @variablen auch nicht funktionieren.

Den fast 100% funktionierende LSG hab ich jedoch hier gefunden:

Jedoch werden die „“ von C:… verschluckt.
Vll hast du ja eine Ahnung?
Mysql verwende ich als Datenbank

Gut ich bin drauf gekommen statt \ muss man einfach / machen.

\ ist das reservierte Escape-Zeichen. Man verwendet es, um z.B. mit \n einen Zeilenumbruch in eine Zeichenfolge einzufügen. Wenn man das Zeichen \ einfügen will, dann muss man zwei Backslashes verwenden, also C:\\verzeichis.

Ich empfehle dir nochmals, den Dateinamen erst in einer Variable abzulegen und deren Inhalt anzuzeigen. Das erleichtert die Fehlersuche. Und wenn du hier Code einstellst, dann rücke einfach jede Zeile um 4 Leerzeichen ein. Das sieht dann so aus:

set @dateiname=concat('C:\\file_');
set @dateiname=concat(@dateiname, localtimestamp());
set @dateiname=concat(@dateiname, '.csv');
select @dateiname

Die Ausgabe dieser Codesequenz ist:

@dateiname
C:\file_2023-03-02 10:26:42.csv

Man kann (zumindest in mysql) auch / verwenden, dann spart man sich das \\

Das ist sie in der Tat. Zumindest einfachere Programme auf jeden Fall, mit komplexen habe ich es nicht ausprobiert. Und was sie auch sehr gut gemacht hat: ich habe sie mit einem (auch hier: nicht sehr komplexen) PHP-Skript gefüttert und um Erklärung des Skripts gebeten, und die Erklärung war super! Davon könnten sich meine Schüler eine Scheibe abschneiden!

Oh Schei*e.

1 Like