Cast / Converti nvarchar in datetime
ho un tavolo:
id timestamp
1 31.10.2020 16:32:11
2 09.09.2020 09:15:49
3 22.04.2020 02:48:15
La tabella ha un'enorme quantità di questi dati. Il timestamp della colonna è il tipo di dati "nvarchar". E ho bisogno di ordinare i dati per data o usarli nelle clausole WHERE per vincoli per data, quindi ho bisogno di convertire "timestamp" in datetime. Ma non posso. Ho provato a convertire e lanciare ma non ci sono riuscito.
Qualche consiglio?
Grazie.
Risposte
Correggi il tuo progetto e modifica la colonna con un tipo di dati di data e ora. Considerando che i tuoi dati sono accurati fino a 1 secondo, datetime2(0)sembra appropriato qui. Per prima cosa dobbiamo cambiare il "formato" del nvarcharvalore in un formato ISO. Utilizzeremo il formato ISO8601 (aaaa-mm-ggThh: mi: ss.mmm) poiché non è ambiguo:
UPDATE dbo.YourTable
SET [timestamp] = CONVERT(nvarchar(20),TRY_CONVERT(datetime2(0), [timestamp], 4), 126);
Ora puoi ALTERla tabella e modificare il tipo di dati in datetime2(0):
ALTER TABLE dbo.YourTable ALTER COLUMN [timestamp] datetime2(0) NULL;
Consiglio anche di usare un nome diverso da quello timestampdella tua colonna. timestampè un sinonimo deprecato di rowversion, quindi il suo uso può creare confusione; soprattutto perché rowversionnon è un valore di data e ora ma un binaryvalore e non può essere convertito in un tipo di dati di data e ora.
È possibile convertire in modo esplicito ad un datetimeutilizzo convert()in formato 104:
select convert(datetime, '31.10.2020 16:32:11', 104)