Как работать с полем varchar в формате даты? - PullRequest
2 голосов
/ 05 января 2012

У меня есть таблица с кучей записей, содержащих дни рождения. Таким образом, поле имеет значение varchar, и каждая запись имеет формат гггг / мм / дд (например, 1903/11/27).

Как лучше всего идентифицировать записи, у которых есть день рождения между 1 и 10 января?

Мое текущее мышление заключается в использовании правых функций и записи значений dd и mm в два отдельных столбца в новой временной таблице. Как только это будет сделано, я буду использовать «И», чтобы получить нужные мне записи.

Так что-то вроде:

SELECT * from BIRTHDAYS where (DateBday >= 1 AND DateBday < 11) and (MonthBday = 1)

Есть ли более простой способ?

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Вы можете использовать:

SELECT *
FROM Birthdays
WHERE CONVERT(DATE, bDayField) BETWEEN '2011/1/1' AND '2011/1/10'

(я использую bDayField в качестве имени вашего текущего поля varchar, которое содержит дни рождения в виде текста).

Преобразует поле varchar в дату, что позволяет использовать оператор BETWEEN. Делает для хорошего, чистого WHERE предложения, я думаю =)

Примечание. Для этого столбца необходимо использовать правильный тип данных Date, DateTime или DateTime2. Может быть, проще всего изменить это сейчас - это может избавить вас от головной боли в будущем.

0 голосов
/ 05 января 2012

Вы можете просто преобразовать их в тип DateTime и затем использовать BETWEEN.

 Where CONVERT(DATE, BirthDayField) BETWEEN STARTDATE AND ENDDATE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...