Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 3

Как строковое значение прибавить к дате?

11.02.2016, 09:59. Показов 1567. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Вопрос:

Есть 2 столбца "a" и "b"

Столбец "a" содержит строковое значение (2m,1m,15d(60 дней, 30 дней, 15 дней))

Столбец "b" содержит дату

Необходимо к столбцу "b" прибавить столбец "a" и получить дату(например стобец "b" содержит дату 01.01.2016, а стобец "a" содержит "15d" должно получиться 16.01.2016).

Гуглил и не нашел ни чего полезного

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE @z INT;
SET @z =0;
 
SELECT a,b,
 
@z = CASE b
WHEN '2m' THEN 60
WHEN '1m' THEN 30
WHEN '15d' THEN 15
END
FROM table1
 
WHERE b<= dateadd (DAY,@z,getdate());
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.02.2016, 09:59
Ответы с готовыми решениями:

Как прибавить к дате 7 дней
Всем привет. как прибавить к дате &quot;очередного ТО и ПР&quot; еще 7 дней, если она формируется как DateAdd('m';;)

Как прибавить к дате 1 день?
я не программист, но занимаюсь одним сайтом как администратор. Потребовалось прибавить к дате 1 день. Мне кажется что это нужно сделать вот...

Как прибавить к дате период?
Привет всем! Подскажите как методом JavaScript прибавить к дате, например 5.10.2005 месяц? А потом к получившейся дате еще месяц? ...

8
2 / 2 / 0
Регистрация: 03.02.2016
Сообщений: 32
11.02.2016, 10:17
Просто прибавьте к дате ваше число... Код выбора нужного числа вы уже привели... Т.е. прокатит простое b + "то, что вы кейсом выбрали".... В итоге будет дата...
Code
1
2
3
4
5
6
7
8
9
10
DECLARE @z INT
set @z=15
 
declare @i datetime
declare @t datetime
 
set @i = '01.01.2015'
 
set @t=@i + @z
print @t
Ответ: 16.01.2015

Как-то так, только проделывайте с данными таблиц

Добавлено через 5 минут
Если сложно понять как это сделать в 1 запросе, то разбейте на части, выберите нужные данные, переведите ваши 2m, 1m, 15d в числа, загоните данные в курсор, а потом уже работайте с датой и числами....
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
11.02.2016, 11:08
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
declare @t table
(
 a varchar(30),
 b date,
 c as
  case right(a, 1)
   when 'd' then dateadd(day, try_convert(int, substring(a, 1, len(a) - 1)), b)
   when 'm' then dateadd(month, try_convert(int, substring(a, 1, len(a) - 1)), b)
 end
);
 
insert into @t
values
 ('15d', '20160101'),
 ('1m', '20160101'),
 ('2m', '20160101');
 
select * from @t;
0
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 3
11.02.2016, 11:36  [ТС]
Все оказалось проще, всем спасибо!

SQL
1
2
3
4
5
6
7
8
SELECT a, b, DATEADD(DAY,
CASE a
WHEN '2m'  THEN 60 
WHEN '1m'  THEN 30 
WHEN '15d' THEN 15
END
,b)
FROM TABLE
0
2 / 2 / 0
Регистрация: 03.02.2016
Сообщений: 32
11.02.2016, 12:48
В принципе как я и сказал, только ты ещё функцию dateadd использовал)

Добавлено через 9 минут
Для твоей задачи можно было бы просто написать а + "тут весь твой case", но только для прибавления именно дней... Для месяца, года и другого изврата больше подойдет dateadd().
Но у тебя может быть нестыковка... Ты уверен, что в месяце именно 30 дней? А где тогда месяцы с 31 днём? А февраль? а если высокосный год? Подумай надо своим CASE......
Думаю лучше использовать как раз таки функцию dateadd(), только добавлять именно месяц, два, или 15 дней... как раз таки из-за того, что в месяцах разное количество дней....

Добавлено через 4 минуты
Впихай dateadd() внутрь CASE, туда, где возвращаются данные(т.е. после THEN) тогда получится то, что тебе нужно, и с датами не будет косяков
1
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 3
12.02.2016, 11:08  [ТС]
Спасибо за подсказку!

SQL
1
2
3
4
5
6
7
8
SELECT a,b,
CASE a
WHEN '2m'  THEN DATEADD(MONTH,2,b)
WHEN '1m'  THEN DATEADD(MONTH,1,b)
WHEN '15d' THEN DATEADD(DAY,15,b)
END 
 
FROM TABLE
0
2 / 2 / 0
Регистрация: 03.02.2016
Сообщений: 32
15.02.2016, 08:19
Да не за что, ты только проверь, чтобы эта dateadd() правильно работала с февралём и высокосными годами, а то может быть всякое)
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
15.02.2016, 11:01
Цитата Сообщение от snepa Посмотреть сообщение
ты только проверь, чтобы эта dateadd() правильно работала с февралём и высокосными годами, а то может быть всякое
Что??
0
2 / 2 / 0
Регистрация: 03.02.2016
Сообщений: 32
15.02.2016, 14:36
iap, я с функцией dateadd() ни разу не работал, по этому и посоветовал лишний раз перепроверить, как говорится бережёного и бог бережёт)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2016, 14:36
Помогаю со студенческими работами здесь

Как прибавить к дате месяц?
VBA Есть какое-то ComboBox2.Value - дата в формате dd.mm.yyyy как получить значение на месяц больше, т.е. dd.mm+1.yyyy ...

Как прибавить 20 дней к дате
В новой ячейке должно прибавляться 20 дней к той дате которая находится в другой ячейки, подскажите формулу

Как прибавить к дате дни
Проблема в следующем. есть компонент DateTimePicker1 и есть Edit . В Edit вводится целое число и необходимо получить дату:...

Как прибавить год к дате DBDateTimeEditEh?
Привет всем! 3д Дизайнер-Проффффи Программирование- чайник! Помогите пожалуйста добрые люди! На форме есть 2 компонента...

Как прибавить к дате одну минуту
Приветствую уважаемые форумчане! 3 ий день курю форум но не могу найти ответ на свой вопрос, поэтому зранее извиняюсь если гдето не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru