Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Linq:Nach Datum sortieren, wenn es als Text gespeichert wird

Sie können der Tabelle eine berechnete Spalte hinzufügen, die diese Zeichenfolgen in Daten umwandelt, wenn Ihr Diskriminator einen bestimmten Wert hat (hier habe ich nur 'date' verwendet ).

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

Wenn Sie Zeitinformationen haben, dann date sollte datetime sein im CONVERT() Funktion.

Auch die 101 ist ein Stilcode, der ein erwartetes Format von MM/dd/yyyy angibt . Wenn Sie etwas anderes haben, lesen Sie hier:http://msdn.microsoft .com/en-us/library/ms187928.aspx , aber denken Sie daran, dass bei Verwendung eines Stils unter 100 Ihr Ausdruck als nicht deterministisch betrachtet wird und Sie Ihre berechnete Spalte nicht PERSISTED machen können , sodass die Konvertierungen bei jeder Abfrage spontan durchgeführt werden (das wollen Sie nicht).

Die berechnete Spalte aktualisiert sich selbst, wenn sich die Zeilenwerte ändern; Andernfalls werden die Werte wie in jeder anderen Spalte beibehalten und können abgefragt werden. Keine Trigger erforderlich.