В БД SQL server'a есть таблица колонкой формата datetime в нее данные заносятся посредством функции getdate(), мне нужно получить данные за определенный период сгруппированный по дате, но есть одна проблема группировка идет не только по дате но и по времени, что приводит к тому что вместо того чтобы в одной строке показать сумму данных за один день, SQL Server 2000 выводит все строки которые были занесены в этот день, потому что группировка идет не только по дате, но и по времени.
Есть ли возможность извлечь из колонки только значение даты (без значения времени) встроенными в SQL server функциями, или же придется представлять колонку в виде строки, с помощью функция вывода числа, месяца и года, что крайне не желательно?
Заранее благодарен!
Здравствуйте, p_sergey, Вы писали:
_>Есть ли возможность извлечь из колонки только значение даты (без значения времени) встроенными в SQL server функциями, или же придется представлять колонку в виде строки, с помощью функция вывода числа, месяца и года, что крайне не желательно?
1. Тебе уже посоветовали стандартный способ, через CONVERT. Учись пользоваться поиском.
2. Я, лично, играюсь с внутренним представлением даты в MSSQL. Для обрезания даты/времени это наиболее быстрый способ, а для (лирическое отступление) округления до дней/часов/минут и т.д. быстрее работает DATEADD+DATEDIFF способ. Поищщи на форуме -- была тема.
CREATE FUNCTION dbo.EXTRACTDATE
(
@Value AS DATETIME
)
RETURNS DATETIME
AS
BEGIN
RETURN CAST((SUBSTRING(CAST(@Value AS BINARY(8)), 1, 4) + CAST(0 AS BINARY(4))) AS DATETIME)
END
GO
CREATE FUNCTION dbo.EXTRACTTIME
(
@Value AS DATETIME
)
RETURNS DATETIME
AS
BEGIN
RETURN CAST((CAST(0 AS BINARY(4)) + SUBSTRING(CAST(@Value AS BINARY(8)), 5, 4)) AS DATETIME)
END
GO
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Здравствуйте, p_sergey, Вы писали:
_>В БД SQL server'a есть таблица колонкой формата datetime в нее данные заносятся посредством функции getdate(), мне нужно получить данные за определенный период сгруппированный по дате, но есть одна проблема группировка идет не только по дате но и по времени, что приводит к тому что вместо того чтобы в одной строке показать сумму данных за один день, SQL Server 2000 выводит все строки которые были занесены в этот день, потому что группировка идет не только по дате, но и по времени. _>Есть ли возможность извлечь из колонки только значение даты (без значения времени) встроенными в SQL server функциями, или же придется представлять колонку в виде строки, с помощью функция вывода числа, месяца и года, что крайне не желательно? _>Заранее благодарен!
поскольку дата хранится как значение с плавающей точкой, причем время идет после запятой, то как вариант
select
from
table1
group by floor(cast(datetimecolumn as float))
Здравствуйте, tarasich, Вы писали:
T>поскольку дата хранится как значение с плавающей точкой, причем время идет после запятой,
Садись ДВА!
T>то как вариант T>select T>from T>table1 T>group by floor(cast(datetimecolumn as float))
А если посмотришь в план выполнения запроса, то увидишь что MSSQL это через CONVERT(VARCHAR, @date, 112) делает.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков