Как применить сравнение Datetime на varchar Datatype в C # - PullRequest
1 голос
/ 19 марта 2011

Я хочу применить сравнение даты и времени к полю типа varchar в базе данных SQL Server.Я хочу знать, как я могу применить это, например, мой запрос что-то вроде этого

from Pos in TableName
where Pos.vcr_Value >= Convert.ToDateTime("UserInputDate") //UserInputDate = 02/02/2011
select Pos;

Если я попробую это, это будет работать

from Pos in TableName
    where Pos.vcr_Value == "UserInputDate" //UserInputDate = 02/02/2011
    select Pos;

Но это просто соответствует дате, которую я хочучтобы получить все записи после переменной UserInputDate

Примечание: В этом поле хранятся переменные типы данных, когда-то сохраняются строки, когда-то datetime

Ответы [ 3 ]

2 голосов
/ 21 марта 2011

Как уже говорили другие, ваш дизайн базы данных в основном плохой.Учитывая, что столбец может вообще не быть датой, вам нужно использовать DateTime.TryParse или DateTime.TryParseExact, чтобы написать что-то, что будет работать в LINQ to Objects .В LINQ to SQL это не сработает, так как вам нужно использовать лямбда-выражение с блоком в качестве тела, и его нельзя преобразовать в дерево выражений.

Кроме того, вы также возникла проблема с определением ожидаемого формата даты - что является естественным следствием хранения дат в текстовом поле, а не в качестве собственного поля на основе даты.

Если ваша датаформат был yyyy-MM-dd (или yyyy / MM / dd) было бы возможно сделать что-то, что по крайней мере приблизительно правильный запрос, выполнив сравнение строки, например, сказав, что значение должно быть между«2011-02-02» и «2099-12-31», например.Даже в этом случае он будет соответствовать значениям, таким как «201, это на самом деле не дата».

Если у вас не слишком много записей, вы всегда можете выполнить фильтрацию на стороне .NET, а не в SQL- это не идеально, но если у вас есть для работы со сломанной схемой, это, вероятно, самый надежный вариант.Однако, если вообще возможно , вам следует изменить способ хранения данных.

1 голос
/ 19 марта 2011

Исправьте вашу базу данных. Преобразовать поле varchar в DateTime

0 голосов
/ 19 марта 2011

отметка здесь Есть ответы как конвертировать и сравнивать даты

НТН

Иво Стойков

PS: Стив прав. формат даты хранится в БД как varchar очень плохая практика!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...