powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменить данные
14 сообщений из 14, страница 1 из 1
Изменить данные
    #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
Изменить данные
    #39744127
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
royun,
Ваш запрос возврщает 09:00
В чем смысл этого значения и как он соотносится со следующим запросом?
...
Рейтинг: 0 / 0
Изменить данные
    #39744129
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
royun,
CASE
...
Рейтинг: 0 / 0
Изменить данные
    #39744192
royun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу вывести данные за определенный период и при этом изменить данные одного столбца при выводе.
...
Рейтинг: 0 / 0
Изменить данные
    #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
Изменить данные
    #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
Изменить данные
    #39744224
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
royun,

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

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

ну почему, в услугах фиксированной телефонии 3 секунды дают, защитный интервал а установление соединения.
...
Рейтинг: 0 / 0
Изменить данные
    #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
Изменить данные
    #39744239
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
Изменить данные
    #39744247
royun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо уважаемые получилось. Спасибо за помощь.
...
Рейтинг: 0 / 0
Изменить данные
    #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
Изменить данные
    #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
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменить данные
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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