Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Linq:Classifique por data quando armazenado como texto


Você pode adicionar uma coluna computada à tabela que converterá essas strings em datas quando seu discriminador tiver um valor específico (aqui acabei de usar 'date' ).
ALTER TABLE Foo
ADD trueDate AS
    CASE 
        WHEN type = 'date' THEN CONVERT(date, 'mixedColumn', 101)
        ELSE NULL
    END
PERSISTED

Se você tiver informações de tempo, então date deve ser datetime no CONVERT() função.

Além disso, o 101 é um código de estilo que indica um formato esperado de MM/dd/yyyy . Se você tiver algo diferente, consulte isto:http://msdn.microsoft .com/en-us/library/ms187928.aspx , mas lembre-se de que, se você usar um estilo abaixo de 100, sua expressão será considerada não determinística e você não poderá tornar sua coluna calculada PERSISTED , então as conversões serão feitas dinamicamente com cada consulta (você não quer isso).

A coluna computada se atualizará quando os valores da linha forem alterados; caso contrário, os valores são persistidos e podem ser consultados como em qualquer outra coluna. Não são necessários gatilhos.