Benutzer mit den meisten Antworten
Transact SQL: SELECT mit Datumskonvertierung

Frage
-
Hallo liebe Forenmitglieder,
ich habe eine SQL Server-Datenbank mit sinngemäß folgenden zwei Tabellen:
Tabelle A
field nchar(40)
anzahl int
Tabelle B
add_datum datetime
bezeichnung nchar(100)
Das Feld 'field' in Tabelle A entspricht im Prinzip dem Feld 'add_datum' in Tabelle B. Ich muss eine SQL-Anweisung finden, die mir inhaltlich zum Datenatz aus Tabelle A die Bezeichnung aus Tabelle B hinzuliest. Wären die Datentypen der Felder 'field' und 'add_datum' gleich, wäre das natürlich kein Problem.
Zur Verdeutlichung des Problems hier zwei Datensätze aus den beiden Tabellen:
Tabelle A: '2007110116330800', 120
Tabelle B: '2007-11-01 16:33:08.000', 'Bezeichnung'
Die Anweisung SELECT field, anzahl, bezeichnung FROM A INNER JOIN B ON field = add_datum führt zu der Fehlermeldung '
Fehler beim Konvertieren einer Zeichenfolge in ein Datum und/oder eine Uhrzeit.'
Hat jemand eine Idee, wie ich das Problem lösen kann?
Vielen Dank,
Sönke Schreiber
Antworten
-
Hallo Sönke,
ich würde mir eine Funktion schreiben, die den bisherigen Wert in das Format
yyyy-mm-ddThh:nn:ss.mmm
umwandelt. Wie die Umwandlung aussehen könnte, siehst Du hier:
DECLARE @Field nchar( 40 ) = '2007110116330800'; DECLARE @String nvarchar( 40 ); SELECT @String = SUBSTRING( @Field, 1, 4 ) + '-' + SUBSTRING( @Field, 5, 2 ) + '-' + SUBSTRING( @Field, 7, 2 ) + 'T' + SUBSTRING( @Field, 9, 2 ) + ':' + SUBSTRING( @Field, 11, 2 ) + ':' + SUBSTRING( @Field, 13, 2 ) + '.' + SUBSTRING( @Field, 15, 3 ) SELECT CONVERT( datetime, @String )
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stephan Mensing Mittwoch, 8. Juni 2016 10:06
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 29. Juni 2016 09:37
-
Hallo zusammen,
ab SQL Server 2012 gibt es Funktionen wie DATETIME2FROMPARTS, mit der man via Substring ein richtiges Datum daraus basteln kann, für mehr siehe Datums- und Uhrzeitdatentypen und zugehörige Funktionen (Transact-SQL).
Gruß Elmar
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 22. Juni 2016 10:40
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 29. Juni 2016 09:53
Alle Antworten
-
Hallo Sönke,
"field" enspricht weder im Prinzip noch sonst auf irgendeine Art dem Feld "add_datum". Weder vom Datentyp noch vom Inhalt her. Da das Format auch nichts entspricht, was man als Datum interpretieren könnte, kommt der Fehler völlig zurecht.
Speicher die Inhalte im richtigen Format bzw. versuch, die Werte mit Stringoperationen zu zerschneiden und in ein konvertierfähiges Format umzuwandeln.
@Tu Dang: Das klappt nicht, da der String wie angegeben nicht umgewandelt werden kann.
SELECT CONVERT( datetime, '2007110116330800' )
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Freitag, 3. Juni 2016 12:56
-
Hallo Stefan,
Danke für Deine Antwort. Mein Problem ist, dass ich diese Tabellen in keinster Weise verändern kann. Weder bzgl. Datentyp noch bzgl. Inhalt.
Das Convert geht so tatsächlich nicht, und dass dies zurecht so ist, bezweifle ich nicht.
Ich suche nach einem Workaround. Dieser wird sich nun um Stringoperationen drehen.
Gruß,
Sönke
-
Hallo Sönke,
ich würde mir eine Funktion schreiben, die den bisherigen Wert in das Format
yyyy-mm-ddThh:nn:ss.mmm
umwandelt. Wie die Umwandlung aussehen könnte, siehst Du hier:
DECLARE @Field nchar( 40 ) = '2007110116330800'; DECLARE @String nvarchar( 40 ); SELECT @String = SUBSTRING( @Field, 1, 4 ) + '-' + SUBSTRING( @Field, 5, 2 ) + '-' + SUBSTRING( @Field, 7, 2 ) + 'T' + SUBSTRING( @Field, 9, 2 ) + ':' + SUBSTRING( @Field, 11, 2 ) + ':' + SUBSTRING( @Field, 13, 2 ) + '.' + SUBSTRING( @Field, 15, 3 ) SELECT CONVERT( datetime, @String )
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stephan Mensing Mittwoch, 8. Juni 2016 10:06
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 29. Juni 2016 09:37
-
Hallo zusammen,
ab SQL Server 2012 gibt es Funktionen wie DATETIME2FROMPARTS, mit der man via Substring ein richtiges Datum daraus basteln kann, für mehr siehe Datums- und Uhrzeitdatentypen und zugehörige Funktionen (Transact-SQL).
Gruß Elmar
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 22. Juni 2016 10:40
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 29. Juni 2016 09:53