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

Откуда:
Сообщений: 51
Здравствуйте.

Сделал запрос вида:

if SUBSTRING('08:02',1,2)='00' and Cast(SUBSTRING('08:02',4,2)as int)<3
	select '00:00'
else
	if LEN(CAST((CAST(SUBSTRING('08:02',1,2)AS int)+1) as char(2)))<2
		select '0'+CAST((CAST(SUBSTRING('08:02',1,2)AS int)+1) as char(1))+':00'		
	else 
		select CAST((CAST(SUBSTRING('08:02',1,2)AS int)+1) as char(2))+':00'


Как применить его к запросу:

SELECT * FROM [TEST_2018].[DBO].[2018] 
WHERE [DATE] BETWEEN '01.11.2018' AND '30.11.2018'


Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
7 дек 18, 11:33    [21756785]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
Massa52
Member

Откуда:
Сообщений: 319
royun,
Ваш запрос возврщает 09:00
В чем смысл этого значения и как он соотносится со следующим запросом?
7 дек 18, 11:49    [21756809]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
iiyama
Member

Откуда:
Сообщений: 557
royun,
CASE
7 дек 18, 11:53    [21756813]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
royun
Member

Откуда:
Сообщений: 51
Хочу вывести данные за определенный период и при этом изменить данные одного столбца при выводе.
7 дек 18, 12:34    [21756899]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
royun
Member

Откуда:
Сообщений: 51
И изменять данные одного столбца надо по этим правилам:

if SUBSTRING('08:02',1,2)='00' and Cast(SUBSTRING('08:02',4,2)as int)<3
	select '00:00'
else
	if LEN(CAST((CAST(SUBSTRING('08:02',1,2)AS int)+1) as char(2)))<2
		select '0'+CAST((CAST(SUBSTRING('08:02',1,2)AS int)+1) as char(1))+':00'		
	else 
		select CAST((CAST(SUBSTRING('08:02',1,2)AS int)+1) as char(2))+':00'


Не могу понять как сделать select и при этом параллельно изменить данные одного столбца.
7 дек 18, 12:38    [21756904]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
royun
Member

Откуда:
Сообщений: 51
Есть таблица с данными

02:04
00:26
01:26
00:38
00:26
01:48
00:24
00:07
03:49
00:31

Это минута и секунда.

Изменить следующим образом:
Если минута = '00' и секунда < 3 то изменить на '00:00'
иначе прибавляем к минуте 1 и если длина минуты < 2 символов, то спереди ставим 0, а в конце - ':00'
иначе если длина минуты =2 символа, то оставляем минуту как есть и в конце ставим ':00'
7 дек 18, 12:53    [21756925]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
Владислав Колосов
Member

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

выражение CASE вместо IF .. ELSE и подставьте в запрос, выше написали.
7 дек 18, 13:07    [21756948]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2368
royun,

а я думал первые 3 секунды бесплатно уже в прошлом:)
7 дек 18, 13:09    [21756952]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
Владислав Колосов
Member

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

ну почему, в услугах фиксированной телефонии 3 секунды дают, защитный интервал а установление соединения.
7 дек 18, 13:13    [21756961]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
invm
Member

Откуда: Москва
Сообщений: 8203
royun,

select
 ...,
 left(cast(c.t as varchar(30)), 5) 
from
 [Есть таблица с данными] a cross apply
 (select cast(a.[Это минута и секунда] as time)) b(t) cross apply
 (select case when b.t >= '00:00' and b.t < '00:03' then '00:00' else dateadd(hour, 1, b.t) end) c(t);
7 дек 18, 13:14    [21756962]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
iap
Member

Откуда: Москва
Сообщений: 46475
royun
Изменить следующим образом:
Если минута = '00' и секунда < 3 то изменить на '00:00'
иначе прибавляем к минуте 1 и если длина минуты < 2 символов, то спереди ставим 0, а в конце - ':00'
иначе если длина минуты =2 символа, то оставляем минуту как есть и в конце ставим ':00'
WITH T AS
(
 SELECT * FROM(VALUES
 ('02:04')
,('00:26')
,('01:26')
,('00:38')
,('00:02')
,('01:48')
,('00:24')
,('00:07')
,('03:49')
,('00:31'))T(S)
)
SELECT
 CASE
  WHEN S<'00:03'
  THEN '00:00'
  ELSE REPLACE(STR(LEFT(S,CHARINDEX(':',S)-1)+1,2,0),' ','0')+':00'
 END
FROM T;
Так?
7 дек 18, 13:20    [21756975]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
royun
Member

Откуда:
Сообщений: 51
Спасибо уважаемые получилось. Спасибо за помощь.
7 дек 18, 13:27    [21756988]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
royun
Member

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

select [DATE] 
case 	
	when SUBSTRING(Dlit,1,2)='00' and Cast(SUBSTRING(Dlit,4,2)as int)<3
		then '00:00'
	when LEN(CAST((CAST(SUBSTRING(Dlit,1,2)AS int)+1) as char(2)))<2
		then '0'+CAST((CAST(SUBSTRING(Dlit,1,2)AS int)+1) as char(1))+':00'
	else CAST((CAST(SUBSTRING(Dlit,1,2)AS int)+1) as char(2))+':00'
end 
FROM [Test_2018].[DBO].[2018] 
WHERE [DATE] BETWEEN '01.11.2018' AND '30.11.2018'


Сделал так.
7 дек 18, 13:30    [21756993]     Ответить | Цитировать Сообщить модератору
 Re: Изменить данные  [new]
prog882
Member

Откуда:
Сообщений: 1
royun,
declare @tab1 table ( col time)
insert into @tab1 ( col ) values
 ('00:02:04')
,('00:00:26')
,('00:01:26')
,('00:00:38')
,('00:00:02')
,('00:01:48')
,('00:00:24')
,('00:00:07')
,('00:03:49')
,('00:00:31')
,('00:08:02')

select format( col, N'mm\:ss') as col
,
format( 
case 
	when col < convert( time, '00:00:03') 
	then convert( time, '00:00:00' ) 
	else convert( time, dateadd(mi, datediff( mi, 0, col ) + 1, 0 ) )
end , N'mm\:ss') as res
from @tab1;

-- или

declare @tab2 table ( col nvarchar(5) )
insert into @tab2 ( col ) values
 ('02:04')
,('00:26')
,('01:26')
,('00:38')
,('00:02')
,('01:48')
,('00:24')
,('00:07')
,('03:49')
,('00:31')
,('08:02')

select *
,
format( 
case 
	when col < convert( time, '00:00:03') 
	then convert( time, '00:00:00' ) 
	else convert( time, dateadd(mi, datediff( mi, 0, concat( '00:', col ) ) + 1, 0 ) )
end , N'mm\:ss') as res
from @tab2;
7 дек 18, 15:14    [21757135]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить