Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Цикл с time  [new]
Student_ipi
Guest
Помогите пожалуйста)

Нужно написать такой цикл, чтобы перебиралось время (от 0.0.0 до 23.59.59) и в три колонки записывалось: в первую час,во вторую минуты, в третью секунды.

с датой получилось все, а с временем не могу догадаться(
5 июн 13, 13:13    [14394076]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Трындец студенты пошли, не знают, что такое вложенные циклы

declare @hour int, @minute int, @second int;

set @hour = 0;

while @hour <= 23
begin
   set @minute = 0;
   
   while @minute <= 59
   begin
      set @second = 0;
      
      while @second <= 59
      begin
         print cast(@hour as varchar(30)) + ':' + cast(@minute as varchar(30)) + ':' + cast(@second as varchar(30));
         
         set @second = @second + 1;
      end;
      
      set @minute = @minute + 1;
   end;
   
   set @hour = @hour + 1;
end;
5 июн 13, 13:20    [14394150]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
mike909
Member

Откуда:
Сообщений: 662
Student_ipi,

;with L0 as (select 0 x union all select 0),
     L1 as (select 0 x from L0 t1, L0 t2),
     L2 as (select 0 x from L1 t1, L1 t2),
     L3 as (select row_number() over(order by (select 1)) N from L2 t1, L2 t2)
SELECT *
FROM (SELECT TOP 24 N-1 as c FROM L3 ) as c
CROSS APPLY(SELECT TOP 60 N-1 as m FROM L3 ) as m
CROSS APPLY(SELECT TOP 60 N-1 as s FROM L3 ) as s
ORDER BY 1,2,3
5 июн 13, 13:20    [14394151]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Glory
Member

Откуда:
Сообщений: 104760
Student_ipi
а с временем не могу догадаться

Догадаться про что ?
как перебрать время ?
как извлекать час/минуту/секунду ?
как "в три колонки записать" ?
5 июн 13, 13:21    [14394163]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Student_ipi
Guest
Гость333,

проблема то в том, что нужно не так, нужно сделать как здесь

SET @date = '01.01.2012'

WHILE @date<=GETDATE()
Begin

set @Y= DATENAME (year, @date)
set @M= datepart (MONTH, @date)
set @D= DATENAME (day, @date)

только со временем
5 июн 13, 13:23    [14394178]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Student_ipi
Guest
Glory,

SET @date = '01.01.2012'

WHILE @date<=GETDATE()
Begin

set @Y= DATENAME (year, @date)
set @M= datepart (MONTH, @date)
set @D= DATENAME (day, @date)

не могу догадаться как сделать так же только со временем
5 июн 13, 13:25    [14394200]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Glory
Member

Откуда:
Сообщений: 104760
Student_ipi
проблема то в том, что нужно не так, нужно сделать как здесь

SET @date = '01.01.2012'

WHILE @date<=GETDATE()
Begin

set @Y= DATENAME (year, @date)
set @M= datepart (MONTH, @date)
set @D= DATENAME (day, @date)

только со временем

В сутках 24 часа и в часе 60 минит
Вы не можете написать цикл от 1 до 1440 ?
5 июн 13, 13:25    [14394203]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Student_ipi
нужно сделать как здесь

SET @date = '01.01.2012'

WHILE @date<=GETDATE()
Begin

set @Y= DATENAME (year, @date)
set @M= datepart (MONTH, @date)
set @D= DATENAME (day, @date)

Сделал "как здесь". Результат:
Msg 137, Level 15, State 1, Line 1
Must declare the scalar variable "@date".
Msg 137, Level 15, State 2, Line 3
Must declare the scalar variable "@date".
Msg 137, Level 15, State 2, Line 6
Must declare the scalar variable "@date".
Msg 137, Level 15, State 2, Line 7
Must declare the scalar variable "@date".
Msg 137, Level 15, State 2, Line 8
Must declare the scalar variable "@date".
5 июн 13, 13:26    [14394210]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Student_ipi
Guest
Гость333,

ну потому что это сам цикл, а до этого как бы ещё описание переменных стоит сделать =\\
5 июн 13, 13:28    [14394241]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Student_ipi,

Это не цикл, даже если сделать описание переменных. Как минимум отсутствует слово end, и без модификации @date это бесконечный цикл.
5 июн 13, 13:32    [14394298]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Student_ipi
Guest
Гость333,

USE [PaymentSystem]
GO

Delete from [dbo].[Date]

declare @DID integer
DECLARE @date datetime
declare @Y integer
declare @M integer
declare @MN varchar(20)
declare @RM varchar(20)
declare @D integer

SET @DID = 1
SET @date = '01.01.2012'

WHILE @date<=GETDATE()
Begin

set @Y= DATENAME (year, @date)
set @M= datepart (MONTH, @date)
set @D= DATENAME (day, @date)

SET @MN = CASE @M
WHEN 1 THEN 'Январь'
WHEN 2 THEN 'Февраль'
WHEN 3 THEN 'Март'
WHEN 4 THEN 'Апрель'
WHEN 5 THEN 'Май'
WHEN 6 THEN 'Июнь'
WHEN 7 THEN 'Июль'
WHEN 8 THEN 'Август'
WHEN 9 THEN 'Сентябрь'
WHEN 10 THEN 'Октябрь'
WHEN 11 THEN 'Ноябрь'
WHEN 12 THEN 'Декабрь'
END

INSERT INTO [PaymentSystem].[dbo].[Date]
([Date_ID]
,[Year]
,[Month]
,[Month_name]
,[Day]
,[Date_value])
VALUES
(@DID,@Y,@M,@MN,@D,@date)

set @date=@date + 1
SET @DID = @DID + 1

End

вот полностью скрипт на заполнение таблицы с датой , но если ты его будешь проводить то нужно создать базу и таблицу, ну это так, на всякий случай)
5 июн 13, 13:35    [14394341]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5133
Student_ipi, вам же уже не прозрачно намекнули на пару вариантов, прислушайтесь к советам окружающих.
5 июн 13, 13:37    [14394364]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Student_ipi
set @date=@date + 1

Одна секунда прибавляется к дате следующим образом:
set @date=DATEADD(second, 1, @date)
А вообще подход с циклом крайне неоптимален, почему нужно использовать именно цикл?
5 июн 13, 13:54    [14394530]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Student_ipi
Guest
Гость333,

потому что преподаватель поставил такие условия, не я же сама так решила)
5 июн 13, 14:01    [14394594]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
Student_ipi
Гость333,

проблема то в том, что нужно не так, нужно сделать как здесь

SET @date = '01.01.2012'

WHILE @date<=GETDATE()
Begin

set @Y= DATENAME (year, @date)
set @M= datepart (MONTH, @date)
set @D= DATENAME (day, @date)

только со временем


А что мешает там писать (во вложенном цикле?)
SET @HH = DATEPART(HH, @date)
SET @MI = DATEPART(MI, @date)
SET @SS = DATEPART(SS, @date)


А?
5 июн 13, 14:38    [14394907]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Student_ipi
Guest
AxuliON,

спасибо, почти нормально сработал, но надо поправить))
5 июн 13, 14:49    [14394996]     Ответить | Цитировать Сообщить модератору
 Re: Цикл с time  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
Student_ipi,

Вот это выбросьте сразу:
SET @MN = CASE @M
WHEN 1 THEN 'Январь'
WHEN 2 THEN 'Февраль'


Есть же нормальный
DATENAME


Только в начале скрипта впишите
SET LANGUAGE N'Russian'

Чтобы по-русски было все.
5 июн 13, 15:28    [14395262]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить