Как отобразить время в определенном формате - PullRequest
0 голосов
/ 18 февраля 2011

Использование SQL Server 2005

Table1

ID TimeColumn

001 13.00
002 03.30
003 14.00
004 23.00
005 08.30
...


Формат Table1
TimeColumn Format: HH:MM
TimeColumn Datatype is nvarchar
TimeColumn will display the time One Hour or HalfHour
TimeColumn will not display 08.20, 08.56. It will display the time like 08.00, 08.30.

Я хочу отображать время как 13 вместо 13.00, 3.5вместо 03.30.

Ожидаемый результат

ID   TimeColumn  Value

001  13.00       13
002  03.30       3.5
003  14.00       14
004  23.00       23
005  18.30       18.5
...

Как сделать запрос для вышеуказанного условия?

Ответы [ 6 ]

2 голосов
/ 18 февраля 2011

Исходя из ваших фактов, есть только 2 случая для последних 3 цифр, либо

  • .30 ;или
  • .00

Так что мы просто заменим их

SELECT
    ID,
    TimeColumn,
    Value = replace(replace(TimeColumn, '.30', '.5'), '.00', '')
From Table1

РЕДАКТИРОВАТЬ

Чтобы отбросить ведущий 0, вы можете использовать это вместо (столбец Значение числовой)

SELECT
    ID,
    TimeColumn,
    Value = round(convert(float,TimeColumn)*2,0)/2
From Table1

Или, если вам нужно, чтобы это был varchar

SELECT
    ID,
    TimeColumn,
    Value = right(round(convert(float,TimeColumn)*2,0)/2,5)
From Table1
1 голос
/ 18 февраля 2011

Попробуйте это

SELECT
  DATEPART(hour,TimeColumn) + 
  1 / DATEPART(minute,TimeColumn) * 60 
  AS Value
FROM Table1

Это где TimeColumn DateTime.Для типа столбца NVarChar используйте функцию String для разделения часов и минут.

0 голосов
/ 18 февраля 2011
With TestInputs As
    (
    Select '001' As Id, Cast('13.00' As nvarchar(10)) As TimeColumn
    Union All Select '002','03.30'
    Union All Select '003','14.00'
    Union All Select '004','23.00'
    Union All Select '005','08.30'
    Union All Select '006','08.26'
    Union All Select '007','08.46'
    Union All Select '008','08.56'
    )
    , HoursMinutes As
    (
    Select Id, TimeColumn
        , Cast( Substring(TimeColumn
                    , 1
                    , CharIndex('.', TimeColumn) - 1 ) As int ) As [Hours]
        , Cast( Substring(TimeColumn
                    , CharIndex('.', TimeColumn) + 1
                    , Len(TimeColumn) ) As int ) As [Minutes]
    From TestInputs
    )
Select Id, TimeColumn
    , [Hours] + Case 
                When [Minutes] < 30 Then 0.0
                When [Minutes] < 60 Then 0.5
                Else 1
                End As Value
From HoursMinutes
0 голосов
/ 18 февраля 2011
Declare @table table (ID nvarchar(10),timevalue nvarchar(10))

INSERT INTO @table values('001','13.00')
INSERT INTO @table values('002','03.30')
INSERT INTO @table values('003','14.00')
INSERT INTO @table values('004','23.00')
INSERT INTO @table values('005','08.30')

select (CASE WHEN (CHARINDEX('.3',timevalue)>0) then convert(varchar(2),timevalue,2) 
        else convert(varchar(2),timevalue,2) + '.5'
end)
from @table
0 голосов
/ 18 февраля 2011

Вот как вы можете это сделать:

select SUBSTRING('20.30', 1, 2) + (case when SUBSTRING('20.30', 4, 2) = '30' then '.5' else '' end)

просто замените '20 .30' на имя вашего столбца и добавьте из предложения

0 голосов
/ 18 февраля 2011

Я полагаю, что именно так SQL Server хранит дату и время, затем вы форматируете его со своим вкусом языка программирования.

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