sql >> Databasteknik >  >> RDS >> Sqlserver

Linq:Sortera efter datum när den lagras som text

Du kan lägga till en beräknad kolumn i tabellen som konverterar dessa strängar till datum när din diskriminator har ett specifikt värde (här har jag precis använt 'date' ).

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

Om du har tidsinformation, date bör vara datetime i CONVERT() funktion.

Även 101 är en stilkod som indikerar ett förväntat format på MM/dd/yyyy . Om du har något annat, se detta:http://msdn.microsoft .com/en-us/library/ms187928.aspx , men kom ihåg att om du använder en stil under 100 kommer ditt uttryck att betraktas som icke-deterministiskt och du kan inte göra din beräknade kolumn PERSISTED , så omvandlingarna kommer att göras direkt med varje fråga (det vill du inte).

Den beräknade kolumnen kommer att uppdatera sig själv när radvärdena ändras; annars är värdena kvarstående och frågebara precis som i alla andra kolumner. Inga utlösare krävs.



  1. SQL - Avancerad borttagning av dubbletter med ID NOT IN

  2. En teknisk jämförelse:Microsoft Access 2016 vs SQL Server 2016

  3. Returnera det lokala servernamnet i SQL Server med @@SERVERNAME

  4. mysql preparerat satsfel:MySQLSyntaxErrorException