что эквивалентно TSQL / SQL Server 2008 - PullRequest
1 голос
/ 16 августа 2010

Я привык к оракулу, и теперь мне бросили T-SQL, я скоро прохожу курс, но вы можете помочь до тех пор.

У меня есть список, который мне нужно сгруппировать в считанные минуты.*

Пример данных о дате строки

SELECT ROWDATE,count(rowdate)
FROM [mydb].[dbo].[mytable]
GROUP BY ROWDATE
order by 1

2010-08-16 15:01:18.110 1
2010-08-16 15:01:18.203 1
2010-08-16 15:01:18.377 1
2010-08-16 15:01:18.453 1
2010-08-16 15:01:18.530 1
2010-08-16 15:01:18.610 1
2010-08-16 15:01:18.703 1
2010-08-16 15:01:18.813 1
2010-08-16 15:01:18.953 1
2010-08-16 15:01:19.173 1
2010-08-16 15:01:19.360 1
2010-08-16 15:01:19.483 1
2010-08-16 15:01:19.593 1
2010-08-16 15:01:19.673 1
2010-08-16 15:01:19.733 1
2010-08-16 15:01:19.813 1
2010-08-16 15:01:19.890 1
2010-08-16 15:01:19.970 1
2010-08-16 15:01:20.047 1

Я просто хочу сгруппировать по минутам.

SELECT to_char(rowdate,'dd/MM/yyyy HH24:MI'),count(rowdate)
FROM mytable
GROUP BY to_char(rowdate,'dd/MM/yyyy HH24:MI')
order by 1

На сервере SQL (T-SQL), что будет эквивалентным сценарием?

Ответы [ 4 ]

4 голосов
/ 16 августа 2010

TSQL эквивалент:

TO_CHAR(rowdate,'dd/MM/yyyy HH24:MI')

... есть:

CONVERT(VARCHAR(16), rowdate, 20)

Выражение «20» возвращает: yyyy-mm-dd hh:mi:ss(24h) - это VARCHAR (19), поэтому сокращение до VARCHAR (16) пропускает секунды.

Форматирование DATETIME представляет собой серьезную проблему в TSQL - для SQL Server 2005 единственный реальный способ получить настраиваемое форматирование - это использовать функцию CLR, чтобы в C # можно было использовать метод DateTime.ToString ...

Справка:

3 голосов
/ 16 августа 2010

Это было бы

convert(varchar, rowdate, 100)

Формат не совсем тот же, но важно то, что до минуты тоже.


EDIT:

В качестве альтернативы, вы можете вообще избежать преобразования в varchar:

group by dateadd(ms, -datepart(ms, rowdate) , dateadd(s, -datepart(s, rowdate), rowdate))
2 голосов
/ 16 августа 2010

до даты / времени до минутного использования (что лучше, чем при работе со строками):

DATEADD(minute,DATEDIFF(minute,0,datetime),0)

так, чтобы сгруппировать по минутам, это будет:

SELECT 
    DATEADD(minute,DATEDIFF(minute,0,ROWDATE),0)
    ,count(rowdate)
FROM [mydb].[dbo].[mytable]
GROUP BY DATEADD(minute,DATEDIFF(minute,0,ROWDATE),0)
order by 1
0 голосов
/ 16 августа 2010

Есть ли конкретная причина, по которой вы хотите преобразовать в (var) char?

datepart(minute, rowdate)

Возвращает только одно число: минутную часть поля даты и времени. Очень легко группировать.

В противном случае используйте CONVERT () или CAST () для преобразования между типами символов. Вы также хотите убедиться, что вы используете правильный формат. Здесь есть немного больше об этом: http://www.mssqltips.com/tip.asp?tip=1145

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