SQL: подсчет дат в формате varchar - PullRequest
0 голосов
/ 14 февраля 2012

Задание:

Мне нужно сосчитать каждую запись в таблице, которая была добавлена ​​после 01.01.2011.

Информация:

В таблице "Date_added" есть столбец, отформатированный как varchar и содержащий даты в формате мм / дд / гггг.

Что я пробовал:

Я попробовал следующий запрос:

SELECT count(date_added) FROM Abatements_Doc WHERE date_added >= '07/01/2011'

К сожалению, он считал любую дату, когда месяц был больше 07, независимо от года или дня. Я не знаю, как мне отформатировать мой запрос, чтобы он правильно читал даты, а не по сортировке ascii. В своем исследовании я обнаружил опции CAST и CONVERT, но не уверен, как их использовать, или какой мне следует использовать, если таковые имеются. Я чрезвычайно новичок в SQL, и хочу убедиться, что я не испортил данные в таблице. Мне просто нужно получить количество, как указано выше, без каких-либо изменений данных в таблице. Любая помощь в этом отношении будет очень признательна. Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 14 февраля 2012

Я не проверял.Но попробуйте преобразовать заявление.

SELECT count(date_added) 
FROM Abatements_Doc 
WHERE convert(datetime,date_added,1) >= convert(datetime,'07/01/2011',1)
1 голос
/ 14 февраля 2012

(1) не используйте mm/dd/yyyy в качестве формата даты.Используйте безопасный и однозначный формат;единственное, кому я доверяю DATETIME/SMALLDATETIME, это YYYYMMDD.

(2) измените тип данных в вашей таблице на DATETIME/SMALLDATETIME/DATE в зависимости от требуемой точности.Тогда `WHERE date_added> = '20110701' будет работать очень хорошо (и будет использовать индекс для этого столбца, если он существует).

(3), если вы не можете изменить тип данных, тогда следующеетакже будет хорошо работать (хотя индекс не будет использоваться):

WHERE CONVERT(DATETIME, date_added, 101) >= '20110701'
0 голосов
/ 14 февраля 2012

Преобразуйте значения столбца date_added и целевую дату в DATETIME и сравните; как в:

SELECT COUNT(1)
FROM Abatements_Doc
WHERE (CONVERT(datetime, date_added, 101)) >= CONVERT('07/01/2011', date_added, 101))
0 голосов
/ 14 февраля 2012

Невозможно сравнить Varchar, попробуйте изменить столбец на тип даты.

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