Сколько хранимых процедур создается каждый день (проблема с преобразованием даты и времени)? - PullRequest
1 голос
/ 19 мая 2010

Я делаю запрос, который возвращает мне количество хранимых процедур, которые создаются каждый день, как следует

SELECT  convert(varchar, crdate, 103) as Date,Count(*) as Counter
FROM    sysobjects
WHERE   (xtype = 'p') AND (name NOT LIKE 'dt%')
Group by  convert(varchar, crdate, 103)

и он уже работает, но даты отображаются в строковом формате, который я не могу заказать, например ниже

01/03/2010  3
01/04/2008  4
01/05/2010  5
01/11/2008  1
01/12/2008  4
02/03/2008  1
02/03/2010  2
02/04/2008  4
02/05/2010  2
02/11/2008  2
02/11/2009  2
02/12/2008  4
03/01/2010  1
03/02/2010  2
03/03/2010  2
03/04/2008  2
03/04/2010  2
03/05/2008  1
03/05/2010  2

Я хочу сделать то, в котором дата в формате datetime, чтобы я мог сделать order by успешно, я попытался convert(datetime, crdate, 103), но он показывает полную дату

есть идеи, как это сделать?

Ответы [ 3 ]

1 голос
/ 19 мая 2010

Как насчет этого:

select dt, COUNT(*) from
(
    SELECT  convert(datetime, convert(varchar, crdate, 112)) as dt
    FROM    sysobjects
    WHERE   (xtype = 'p') AND (name NOT LIKE 'dt%')
) DayOnly
group by dt
order by dt asc
1 голос
/ 19 мая 2010
SELECT DATEADD(day, DATEDIFF(day, 0, o.crdate), 0) [Date],
       COUNT(*) [Counter]
FROM sys.sysobjects o
WHERE o.xtype = 'p' AND o.name NOT LIKE 'dt%'
GROUP BY DATEADD(day, DATEDIFF(day, 0, o.crdate), 0)
1 голос
/ 19 мая 2010

Чтобы получить сортируемую дату, вам нужен год, затем месяц, затем дата. используйте формат "112".

SELECT  convert(varchar, crdate, 112) as Date,Count(*) as Counter
FROM    sysobjects
WHERE   (xtype = 'p') AND (name NOT LIKE 'dt%')
Group by  convert(varchar, crdate, 112)
order by  Date

, что дает это:

Date        Counter
20040711    124
20040713    1
20040725    1
20040726    2
20040803    6

Если вы хотите получить правильный порядок сортировки, но дату в другом формате, вы можете использовать такой подзапрос, как этот.

select CONVERT(varchar, GroupDate, 103) Date, Counter
FROM (
    SELECT  MIN(crdate) as GroupDate,Count(*) as Counter
    FROM    sysobjects
    WHERE   (xtype = 'p') AND (name NOT LIKE 'dt%')
    Group by  convert(varchar, crdate, 112)
) A
order by  GroupDate

, что дает

Date        Counter
11/07/2004  124
13/07/2004  1
25/07/2004  1
26/07/2004  2
03/08/2004  6
...