Angenommen, die ich geschaffen habe eine Tabelle und Einfügen von Daten, wie untenWie für jedes Format in SQL
create table datetimefromat
(
SlNo int identity,
datetimeVarchar varchar(100)
)
go
DECLARE @now datetime
SET @now = GETDATE()
insert into datetimefromat (datetimeVarchar)
values (convert(nvarchar(MAX), @now, 0)),
(convert(nvarchar(MAX), @now, 1)),
(convert(nvarchar(MAX), @now, 3)),
(convert(nvarchar(MAX), @now, 5)),
(convert(nvarchar(MAX), @now, 20)),
(convert(nvarchar(MAX), @now, 13)),
(convert(nvarchar(MAX), @now, 22)),
(convert(nvarchar(MAX), @now, 111));
go
select * from datetimefromat
go
+------+--------------------------+
| SlNo | datetimeVarchar |
+------+--------------------------+
| 1 | Mar 29 2016 12:46PM |
| 2 | 03/29/16 |
| 3 | 29/03/16 |
| 4 | 29-03-16 |
| 5 | 2016-03-29 12:46:32 |
| 6 | 29 Mar 2016 12:46:32:087 |
| 7 | 03/29/16 12:46:32 PM |
| 8 | 2016/03/29 |
+------+--------------------------+
Ich will wandeln es wieder normal Datetime
select
*,
CONVERT(datetime, datetimeVarchar)
from datetimefromat
Aber das varchar in Datetime konvertieren verursacht einen Fehler
Msg 242, Stufe 16, Zustand 3, Zeile 11
Die Umwandlung einer VARCHAR Daten ty pe zu einem Datetime-Datentyp führte zu einem Wert außerhalb des Bereichs.
Wie kann ich das beheben?
Weil ich will die vorhandenen Datensätze und ändern Sie die varchar
Spalte datetime
"Wie kann ich das beheben" - Datum nicht als String an erster Stelle speichern? –
Die Datensätze 2 und 3 werden im Format 'TT/MM/JJ' bzw. 'MM/TT/JJ' gespeichert. Angenommen, Sie hätten diese Abfrage am 4. März ausgeführt, würden sie als '04/03/16 'und '03/04/16' gespeichert. Es gibt keine Möglichkeit für einen Computer herauszufinden, ob dies der 3. März oder der 4. April ist. In der Tat, es gibt keine Möglichkeit für einen Menschen, es zu wissen ...! –
Angenommen, Sie haben keine Kontrolle über die Datenbank (andernfalls speichern Sie keine Daten als Zeichenfolgen, wie Mitch sagte), es ist unmöglich, diese Daten zu korrigieren. Welches Datum würde "03-04-2016" darstellen? 3. April oder 4. März? Wenn Sie nicht wissen können, wie Sie dem SQL-Server erklären, dies zu interpretieren? – HoneyBadger