Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Linq:Ordina per data quando è memorizzato come testo

Puoi aggiungere una colonna calcolata alla tabella che converte quelle stringhe in date quando il tuo discriminatore ha un valore specifico (qui ho appena usato 'date' ).

ALTER TABLE Foo
ADD trueDate AS
    CASE 
        WHEN type = 'date' THEN CONVERT(date, 'mixedColumn', 101)
        ELSE NULL
    END
PERSISTED

Se disponi di informazioni sull'ora, date dovrebbe essere datetime nel CONVERT() funzione.

Inoltre, il 101 è un codice di stile che indica un formato previsto di MM/dd/yyyy . Se hai qualcosa di diverso, fai riferimento a questo:http://msdn.microsoft. .com/en-us/library/ms187928.aspx , ma tieni presente che se utilizzi uno stile inferiore a 100 la tua espressione sarà considerata non deterministica e non puoi rendere la colonna calcolata PERSISTED , quindi le conversioni verranno eseguite al volo con ogni query (non lo vuoi).

La colonna calcolata si aggiornerà automaticamente quando i valori della riga cambiano; in caso contrario i valori sono persistenti e interrogabili proprio come in qualsiasi altra colonna. Nessun trigger richiesto.