sql >> Base de Datos >  >> RDS >> Sqlserver

Linq:ordenar por fecha cuando se almacena como texto

Puede agregar una columna calculada a la tabla que convertirá esas cadenas en fechas cuando su discriminador tenga un valor específico (aquí acabo de usar 'date' ).

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

Si tiene información de tiempo, entonces date debe ser datetime en el CONVERT() función.

Además, el 101 es un código de estilo que indica un formato esperado de MM/dd/yyyy . Si tiene algo diferente, consulte esto:http://msdn.microsoft .com/en-us/library/ms187928.aspx , pero tenga en cuenta que si usa un estilo por debajo de 100, su expresión se considerará no determinista y no podrá hacer que su columna calculada PERSISTED , por lo que las conversiones se realizarán sobre la marcha con cada consulta (no quieres eso).

La columna calculada se actualizará cuando cambien los valores de la fila; de lo contrario, los valores persisten y se pueden consultar como en cualquier otra columna. No se requieren disparadores.