sql приведенный час из даты / времени без сброса ведущего нуля на однозначные часы - PullRequest
7 голосов
/ 16 февраля 2012
CAST(DATEPART(hh, timestamp) AS varchar(2)) + ':00' AS Hour

Это выведет меня из поля метки времени на час, но в случае часов 0-9 оно не заполняет начальный ноль, и поэтому при сортировке по убыванию по часам сортировка выполняется неправильно.

Не уверен, что здесь не так. Я указываю 2-символьный varchar, чтобы освободить место для ведущего нуля. Надеюсь, есть способ исправить это, не пропуская мое поле через функцию, которая добавит для меня начальный ноль.

Ответы [ 3 ]

16 голосов
/ 16 февраля 2012
SELECT RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(HOUR, GETDATE())), 2) + ':00';

Не хотите дополнить 0? Хорошо, вы можете сделать это так же безобразно, как и без беспорядка:

SELECT LEFT(CONVERT(TIME(0), GETDATE()), 2) + ':00';

Очевидно, замените GETDATE() именем вашего столбца. Что, я надеюсь, не совсем timestamp, потому что это зарезервированное слово - для типа данных, который, к сожалению, не имеет ничего общего с датой или временем.

Если вам не нравится ни одно из этих решений, просто выберите данные на SQL Server и позвольте вашему клиентскому приложению обрабатывать детали форматирования / представления. Конечно, это легко сделать, например, с помощью функции C # format().

3 голосов
/ 16 февраля 2012

Предполагая, что отметка времени является столбцом в вашей таблице

select convert(char(3), timestamp, 108) + '00' AS Hour 
from yourtable

Альтернатива

select left(cast(dateadd(hh, datediff(hh, 0, timestamp), 0) as time), 5)
from yourtable

Редактировать:

После тестирования я пришел к выводу, что этосамый быстрый способ (почти производительность и синтаксис как у решения Аарона)

SELECT RIGHT(100 + DATEPART(HOUR, timestamp) , 2) + ':00'
from yourtable
2 голосов
/ 16 февраля 2012

Вы можете использовать тип ВРЕМЯ, который по умолчанию равен 24 часам;

cast(cast(timestamp as time) AS varchar(2)) + ':00' AS Hour
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...