• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Cast String (01.08.2016) zu datetime

Bourbon

Mitglied
Hallo Zusammen,

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?

Code:
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.
 
Werbung:
Werbung:
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?
 
Werbung:
Ich arbeite mit einer Uralten Microsoft Database ... Diese zapfe ich direkt über das Microsoft Query Tool an...
 
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

from
    tabelle
 
Habe folgenden Fehler:
'not' wurde nach der SELECT-Spaltenliste nicht erwartet

Code:
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,
 
Werbung:
Setz das not mal vor das like, also
Code:
not like
Ich bin beruflich viel auf dem MSSQL-Server unterwegs, da kann das not auch vorne stehen :-)
 
Und jetzt schimpft er, dass er 'SUBSTRING' nicht nach der SELECT-Spaltenliste erwartet hat ... Man geht mir diese alte DB auf den Kranz ...
 
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:
Code:
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

Was für ein DBMS von M$ ist das denn genau?
 
Werbung:
Zurück
Oben