Как я могу создать это расписание со стабильным форматом времени? - PullRequest
0 голосов
/ 08 мая 2009

Как мне получить результат "My Dream Table Result"

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 голосов
/ 08 мая 2009

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
0 голосов
/ 08 мая 2009

@ DateNow является DateTime, поэтому также будет иметь Компонент даты

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

даст вам только временную составляющую для вставки в ваш столбец 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...