Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменить данные / 14 сообщений из 14, страница 1 из 1
07.12.2018, 11:33
    #39744106
royun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
Здравствуйте.

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
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'



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

Код: sql
1.
2.
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)
...
Рейтинг: 0 / 0
07.12.2018, 11:49
    #39744127
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
royun,
Ваш запрос возврщает 09:00
В чем смысл этого значения и как он соотносится со следующим запросом?
...
Рейтинг: 0 / 0
07.12.2018, 11:53
    #39744129
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
royun,
CASE
...
Рейтинг: 0 / 0
07.12.2018, 12:34
    #39744192
royun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
Хочу вывести данные за определенный период и при этом изменить данные одного столбца при выводе.
...
Рейтинг: 0 / 0
07.12.2018, 12:38
    #39744195
royun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
И изменять данные одного столбца надо по этим правилам:

Код: sql
1.
2.
3.
4.
5.
6.
7.
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 и при этом параллельно изменить данные одного столбца.
...
Рейтинг: 0 / 0
07.12.2018, 12:53
    #39744213
royun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
Есть таблица с данными

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'
...
Рейтинг: 0 / 0
07.12.2018, 13:07
    #39744224
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
royun,

выражение CASE вместо IF .. ELSE и подставьте в запрос, выше написали.
...
Рейтинг: 0 / 0
07.12.2018, 13:09
    #39744227
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
royun,

а я думал первые 3 секунды бесплатно уже в прошлом:)
...
Рейтинг: 0 / 0
07.12.2018, 13:13
    #39744232
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
WarAnt,

ну почему, в услугах фиксированной телефонии 3 секунды дают, защитный интервал а установление соединения.
...
Рейтинг: 0 / 0
07.12.2018, 13:14
    #39744233
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
royun,

Код: sql
1.
2.
3.
4.
5.
6.
7.
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);
...
Рейтинг: 0 / 0
07.12.2018, 13:20
    #39744239
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
royunИзменить следующим образом:
Если минута = '00' и секунда < 3 то изменить на '00:00'
иначе прибавляем к минуте 1 и если длина минуты < 2 символов, то спереди ставим 0, а в конце - ':00'
иначе если длина минуты =2 символа, то оставляем минуту как есть и в конце ставим ':00'
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
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;

Так?
...
Рейтинг: 0 / 0
07.12.2018, 13:27
    #39744247
royun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
Спасибо уважаемые получилось. Спасибо за помощь.
...
Рейтинг: 0 / 0
07.12.2018, 13:30
    #39744251
royun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
iap,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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'



Сделал так.
...
Рейтинг: 0 / 0
07.12.2018, 15:14
    #39744336
prog882
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить данные
royun,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
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;
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменить данные / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]