Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Linq :Trier par date lorsqu'il est stocké sous forme de texte

Vous pouvez ajouter une colonne calculée à la table qui convertira ces chaînes en dates lorsque votre discriminateur a une valeur spécifique (ici, je viens d'utiliser 'date' ).

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

Si vous avez des informations sur l'heure, alors date devrait être datetime dans le CONVERT() fonction.

Aussi, le 101 est un code de style indiquant un format attendu de MM/dd/yyyy . Si vous avez quelque chose de différent, reportez-vous à ceci :http://msdn.microsoft .com/en-us/library/ms187928.aspx , mais gardez à l'esprit que si vous utilisez un style inférieur à 100, votre expression sera considérée comme non déterministe et vous ne pourrez pas rendre votre colonne calculée PERSISTED , de sorte que les conversions seront effectuées à la volée avec chaque requête (vous ne voulez pas cela).

La colonne calculée se met à jour lorsque les valeurs de ligne changent ; sinon, les valeurs sont persistantes et interrogeables comme dans n'importe quelle autre colonne. Aucun déclencheur requis.