Cast / Converti nvarchar in datetime

Oct 01 2020

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

1 Larnu Oct 01 2020 at 12:03

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.

2 GordonLinoff Oct 01 2020 at 11:57

È possibile convertire in modo esplicito ad un datetimeutilizzo convert()in formato 104:

select convert(datetime, '31.10.2020 16:32:11', 104)