如何以稳定的时间格式创建此时间表?

时间:2009-05-08 09:24:38

标签: sql sql-server sql-server-2005

我如何获得结果“我的梦想表结果”

CREATE TABLE #temp(
    [count] int
  , [Time] nvarchar(50))
DECLARE @DateNow DATETIME,@i int

SET @DateNow='00:00'
SET @i=1;
WHILE(@i<1440)
    BEGIN
        SET @DateNow=DATEADD(minute, 1, @DateNow)
        INSERT INTO #temp ([count], [Time]) VALUES (0, @DateNow)
        SET @i=@i+1
    END
SELECT [count],CONVERT(VARCHAR(max), [Time], 104) AS [Time] FROM  #temp
DROP TABLE #temp

表格结果:

Count  |                 Time
-----------------------------
    0  |  Jan  1 1900 12:01AM
    0  |  Jan  1 1900 12:02AM
    0  |  Jan  1 1900 12:03AM
    0  |  Jan  1 1900 12:04AM

但我不喜欢这张桌子时间格式不行。我需要这张桌子 我的梦想表结果:

Count   |   Time
    0   |  12:01
    0   |  12:02
    0   |  12:03
    0   |  12:04
    ...
    ...
    0   |  22:01
    0   |  22:02
    0   |  22:03
    0   |  22:04

2 个答案:

答案 0 :(得分:0)

@DateNow是一个DateTime,所以也会有Date Compoent

select right(left(convert(nvarchar, @DateNow, 121), 16), 5)

将为您提供放入yoru Nvarchar列的时间组件

while(@i<1440)
begin
    set @DateNow=DATEADD(minute, 1, @DateNow)
    insert into #temp ([count], [Time]) values(0, right(left(convert(nvarchar, @DateNow, 121), 16), 5))
    set @i=@i+1
end
SELECT [count], [Time] from  #temp
drop table #temp

对于shits'n'giggles,这里是如何在不依赖DateTime对象的情况下完成的。

CREATE TABLE #temp (
   [count] int,
   [Time] nvarchar(50) 
)


DECLARE @hour int, @min int, @i int
SELECT @hour = 0, @min = 0, @i = 1

WHILE (@hour < 24)
BEGIN
    WHILE (@min < 60)
    BEGIN
        INSERT INTO #temp ([count], [time]) 
        VALUES (@i, REPLACE(STR(@hour, 2, 0), ' ', 0) + ':' + REPLACE(STR(@min, 2, 0), ' ', 0))
        set @min = @min + 1
        set @i=@i+1
    END     
    set @min = 0
    set @hour = @hour + 1
END

SELECT * FROM #Temp

答案 1 :(得分:0)

SQL Server 2008包含时间数据类型的概念。

检查出来:

CREATE TABLE dbo.Table_1
(
testtime time(7) NULL,
testdate date NULL,
testdatetime datetime NULL
)  ON [PRIMARY]
GO

insert table_1
(testtime, testdate, testdatetime)
values (GETDATE(), GETDATE(), GETDATE())

CREATE TABLE dbo.Table_2
(
testtime time(0) NULL,
testdate date NULL,
testdatetime datetime NULL
)  ON [PRIMARY]
GO
insert table_2
(testtime, testdate, testdatetime)
values (GETDATE(), GETDATE(), GETDATE())

select * from Table_2
select * from Table_1