2012-01-05 3 views
2

У меня есть таблица с кучей записей, содержащих дни рождения. Итак, поле varchar, и каждая запись имеет формат yyyy/mm/dd (например: 1903/11/27).Как работать с полем varchar, который находится в формате даты?

Каков наилучший способ определения записей, имеющих день рождения с 1 по 10 января?

Моя текущая мысль состоит в том, чтобы использовать ПРАВЫЕ функции и фиксировать значения dd и mm в двух отдельных столбцах в новой таблице темп. Как только это будет сделано, я буду использовать «AND», чтобы получить нужные записи.

Так что-то вдоль линий:

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

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

+3

Преобразование в столбец 'DATETIME' - в конце концов, если это дата - почему бы не сохранить его в соответствующем типе данных? –

+0

Будут ли поиски когда-либо пересекать месяцы? Это будет проблемой для вашей текущей настройки (я думаю). – jadarnel27

+1

Ну, я не DBA, так что это не вариант в этом случае. Но я перешел в временную таблицу, а затем сохранил ее в соответствующем формате. Затем я использую функцию DATEPART, чтобы получить только месяц и день (как я не хотел года) записей, которые я искал. – Ray

ответ

0

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

Where CONVERT(DATE, BirthDayField) BETWEEN STARTDATE AND ENDDATE 
2

Вы могли бы использовать:

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

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

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

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

+0

thanks @ jadarnel27. Но мне нужно искать записи независимо от того, в каком году они родились. Но, конечно, я делаю слишком сложным. Преобразование это, кажется, самое простое решение. – Ray