2

SQLServer2000の使用

01:00:00または01:30:00または02:00:00または02:30:00またはのように時間を締めくくりたい03:00:00

表1

ID TIME

001 02:15:00 'Format (HH:mm:ss)
002 02:17:00
003 02:47:00
004 03:00:00
005 02:00:00
....

Time列のデータ型はnvarchar

調子

02:00:00 to 02:15:00 - I want to show 02:00:00 only
02:16:00 to 02:44:00 - I want to show 02:30:00 only
02:45:00 to 03:00:00 - I want to show 03:00:00 only
...

table1の期待される出力

ID TIME

001 02:00:00 'Less than or equal to 2.15 mins so it should change to 02 hrs
002 02:30:00 'Less than 2.44 mins so it should change to 2.30 mins
003 03:00:00 'Greather than 2.45 mins so it should change to 03 hrs
004 03:00:00 'Same
005 02:00:00 'Same
....

この条件を照会する方法

クエリのヘルプが必要

4

4 に答える 4

1

これを試して:

CREATE TABLE #time(ID int, TIME nvarchar(25))

INSERT INTO #time
VALUES(001,'02:15:00'),
(002,'02:17:00'),
(003,'02:47:00'),
(004,'03:00:00'),
(005,'02:00:00')

SELECT time,CASE  
             WHEN CAST(SUBSTRING(time,CHARINDEX(':',time,1)+1,2) as int) <= 15 then LEFT(time,2)+':00:00'
             WHEN CAST(SUBSTRING(time,CHARINDEX(':',time,1)+1,2) as int) >15 and CAST(SUBSTRING(time,CHARINDEX(':',time,1)+1,2) as int) <=45 then LEFT(time,2)+':30:00' 
             WHEN CAST(SUBSTRING(time,CHARINDEX(':',time,1)+1,2) as int) >45 and CAST(SUBSTRING(time,CHARINDEX(':',time,1)+1,2) as int) <=59 then '0'+cast((cast(LEFT(time,2) as int)+1) as varchar(3))+':00:00' 
             END
FROM #time
于 2012-07-19T05:27:29.957 に答える
0

これも試してみてください

select 
    id,
    time,
    convert(varchar(10),dateadd(minute,datediff
        (
        minute,
        case when hours<=15 then -15 when hours>15 then 15  else 0 end,
        time)/30*30,0) ,108)
    as cut_off_time
from
(
    select id,time,
        datepart(minute,cast(time as datetime)) as hours from #time
) as t
于 2012-07-19T09:14:35.843 に答える
0

以下を使用してください

CREATE FUNCTION [dbo].[RoundTime] (@Time VARCHAR(8), @RoundTo float)
RETURNS VARCHAR(8)
AS
BEGIN
   DECLARE @RoundedTime smalldatetime
   DECLARE @Multiplier float

   SET @Multiplier= 24.0/@RoundTo

   SET @RoundedTime= ROUND(CAST(CAST(CONVERT(varchar,@Time,121) AS datetime) AS float) * @Multiplier,0)/@Multiplier

   RETURN CONVERT(VARCHAR(8),@RoundedTime,108)
END



--select dbo.roundtime('02:47:00',0.5)

たった一言で

select CONVERT(VARCHAR(8),dateadd(mi, (datediff(mi,0,'02:47:00')+29)/30*30, 0),108)
于 2012-07-19T04:54:21.920 に答える
0
convert(char(8), dateadd(minute, ((14+datediff(minute, 0, cast(Time as datetime)))/30)*30, 0), 108) as Time

SEデータ

于 2012-07-19T05:32:31.047 に答える