Как преобразовать hh: mm: ss в hh: mm в SQL Server?
Как преобразовать hh: mm: ss в hh: mm в SQL Server?
select Count(Page) as VisitingCount,Page,CONVERT(VARCHAR(8),Date, 108) from scr_SecuristLog
where Date between '2009-05-04 00:00:00' and '2009-05-06 14:58'
and [user] in(select USERNAME
from scr_CustomerAuthorities )
group by Page,Date order by [VisitingCount] asc
Ответы
Ответ 1
В общем случае набор временных меток не является упорядоченным, это означает, что вы не можете получить "последней" временной метки, чья часть времени до минут 2009-05-06 14:58
.
В SQL Server
, который сохраняет временную часть datetime как число 1/300
вторых фракций после полуночи, эта "последняя" временная метка будет 2009-05-06 14:58:59.997
, но это не гарантирует совместимость с будущими версиями с другими методами хранения TIMESTAMP
.
Это означает, что вам нужно разделить условие BETWEEN
на два условия, один из которых strict less
, чем в следующую минуту:
select Count(Page) as VisitingCount,Page,CONVERT(VARCHAR(8),Date, 108) from scr_SecuristLog
where Date >= '2009-05-04 00:00:00'
AND Date < DATEADD(minute, 1, '2009-05-06 14:58')
and [user] in(select USERNAME
from scr_CustomerAuthorities )
group by Page,Date order by [VisitingCount] asc
Это решение будет эффективно использовать индексы на Date
Ответ 2
CONVERT(VARCHAR(5),Date, 108)
- получает только HH:mm
Ответ 3
SELECT Convert(varchar(5), GetDate(), 108)
Использование varchar (5) автоматически усечет дату удаления секунд.
Ответ 4
Для этой конкретной необходимости вы должны использовать метод inter, как указано Quassnoi answer. Однако общая проблема может быть решена с помощью:
select dateadd(second, -datepart(second, @date), @date)
Ответ 5
Я не думаю, что есть встроенная функция; обычно делают что-то вроде этого
SET @time = '07:45'
SET @date = CONVERT(DATETIME,@time)
SELECT @date
SELECT LEFT(CONVERT(VARCHAR,@date,108),5)
Ответ 6
Одним из способов было бы использовать функцию RIGHT() для обрезки даты. Что-то вроде:
RIGHT(CONVERT(VARCHAR(8),Date, 108),5)
Это будет работать, только если количество символов постоянное, например. при необходимости, имеется ноль в начале. (Извините, havn't получил SQL-сервер здесь, чтобы проверить).
Лучше всего использовать функцию datepart T-SQL для разделения, а затем повторного конкатенирования частей даты так:
DARTPART("hh", CONVERT(VARCHAR(8),Date, 108))+":"+DARTPART("mi", CONVERT(VARCHAR(8),Date, 108))
Литература:
http://msdn.microsoft.com/en-us/library/ms174420.aspx
http://msdn.microsoft.com/en-us/library/ms187928.aspx
http://msdn.microsoft.com/en-us/library/ms177532.aspx
Ответ 7
Получить формат hh: mm с сегодняшнего дня:
select getdate()
select convert(varchar(5),getdate(),108)
Получить формат hh: mm из любого столбца datetime в данных таблицы:
select date_time_column_name from table_name where column_name = 'any column data name'
select convert(varchar(5),date_time_column_name,108) from table_name
where column_name = 'any column data name'
select creationdate from employee where Name = 'Satya'
select convert(varchar(5),creationdate,108) from employee
where Name = 'Satya'
Ответ 8
SELECT CAST(CAST(GETDATE() AS Time(0)) AS VARCHAR(5))