ich kämpfe gerade wieder mit einer Datenbankabfrage.
Und zwar habe ich ein Textfeld, in das die Nutzer nach einer bestimmten Definition ein Datum eintragen.
Den Teil bei SUBSTRING herauszubekommen, ist ja einfach.
Ich erhalte dann einen Wert wie bspw. „01.08.2016“.
Nur wie bekomm ich das jetzt in ein richtiges Datum umgewandelt?
CAST(SUBSTRING(vk_beleg_pos.positionstext,3,10) AS smalldatetime) AS 'Need by Date'
Meine Ausgabe erfolgt in Excel, es soll einfach eine Tabelle ausgeben.
Verstehe ich jetzt auch nicht. Wenn ich aus einem Input-Feld einen Wert übernehme, konvertiere ich den doch, sofern notwendig, in einen Timestamp oder ISO-String bevor ich ihn an die Datenbank sende.
Ganz einfach:
Wir nutzen eine bestimmtes Programm, eine Auftragsbearbeitung. Diese ist nicht anpassbar und hat nur ein einziges Feld für den Liefertermin.
Wir brauchen aber drei LTs und da haben wir eine das ungenutzt Feld „Anmerkung“ genutzt, um dort die beiden anderen LTs reinzuschreiben.
Daher diese Verwurstung, die ist aus der Not heraus entstanden
Aber es hat mit Convert(Datetime, … ) geklappt.
Nur erzeugt es mir halt einen Fehler, wenn jemand was falsch eingegeben hat, bspw. wenn der erzeugte String „.08.2016“ ist, weil jemand die Zeichen davor vergessen hat.
Gibt es da eine Möglichkeit, die Fehler irgendwie zu ignorieren?
So wie ich das nun verstehe ist das nun aber keine Datenbank wo du mit PHP drauf zugreifst oder? Weil dann würde ich die Überprüfungen in PHP auslagern.
Arbeitest du denn mit einer mysql Datenbank oder mit einer anderen?
Du könntest zuvor eine einfache Prüfung auf ein gültiges Muster durchführen und im Fehlerfall NULL zurückliefern oder ein definiertes Datum, wie bspw. den 01.01.1970 o.ä.:
[CODE]select
datum =case
when not vk_beleg_pos.positionstext like ‚[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]‘ then null
else convert(date, vk_beleg_pos.positionstext, 104)
end
‚not‘ wurde nach der SELECT-Spaltenliste nicht erwartet
vk_beleg_pos.positionstext =case
when not SUBSTRING(vk_beleg_pos.positionstext,3,10),104) like '[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]' then null else
convert(datetime,SUBSTRING(vk_beleg_pos.positionstext,3,10),104) AS 'Need by Date' end,
Ach ich sehe gerade, Du nutzt einen Alias über AS, ich nutze den als Zuweisung. Beides zusammen geht nicht! Dann bau das mal auf Deine Version um:
select
case
when substring(vk_beleg_pos.positionstext,3,10) not like '[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]' then null
else convert(date, substring(vk_beleg_pos.positionstext,3,10), 104)
end as 'Need by Date'
from
tabelle