Как преобразовать 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))