powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DATEADD
9 сообщений из 9, страница 1 из 1
DATEADD
    #39587967
SiмbаTLM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, вопрос по оператору DATEADD.
Есть таблица, в первой колонке даты начала в формате хххх-хх-хх, во второй количество месяцев. Нужно создать третью колонку, с датами окончания. Все типы данных - nvarchar. Нужно менять их на smalldate и int, или и так сработает? И если пытаться добавить просто через select - ругается, что получено больше одного значения. Подозреваю, что надо джойнить. Но не до конца понимаю как именно

Ну, для примера:

DATE_BEGIN
2017-12-07
2017-02-15
2017-01-13

term_months
36
12
36

То есть в 3 колонке (DATE_END) грубо говоря должно получиться:
2020-12-07
2018-02-15
2020-01-13
...
Рейтинг: 0 / 0
DATEADD
    #39587973
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для даты уже давно есть правильные типы. И в названии этих типов нет слова "char", но есть слово "date".
...
Рейтинг: 0 / 0
DATEADD
    #39587985
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiмbаTLM,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE @t TABLE(DATE_BEGIN NVARCHAR(10), term_months NVARCHAR(10)) 
INSERT @t (DATE_BEGIN, term_months) VALUES
('2017-12-07','36'),
('2017-02-15','12'),
('2017-01-13','36')

SELECT DATE_BEGIN, term_months, DATEADD(month, CAST(term_months AS int), CAST(DATE_BEGIN AS DATE)) AS DATE_END 
FROM @t



DATE_BEGIN term_months DATE_END
2017-12-07 36 2020-12-07
2017-02-15 12 2018-02-15
2017-01-13 36 2020-01-13
...
Рейтинг: 0 / 0
DATEADD
    #39588621
SiмbаTLM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо!
Тогда еще вопросик)

Таблица [Данные]

DATE_BEGIN -- дата начала кредита
2017-12-07
2017-02-15
2017-01-13

term_months -- срок кредита
36
12
36

AMOUNT -- сумма кредита
115000
113510
155000

INTEREST_RATE_EFFECT -- ставка
16,9
16,95
16,55

DATE_END -- дата окончания кредита
2020-12-07
2018-02-15
2020-01-13


Таблица [Table_1]

[Период]
янв.17
фев.17
мар.17
апр.17
май.17
июн.17
июл.17
авг.17
сен.17
окт.17
ноя.17
дек.17
янв.18

[Объем погашения за период] -- нужно заполнить сумму всех погашений действующих кредитов за выбранный месяц


Ну и, собственно, части паззла запроса

UPDATE [dbo].[График погашения]

SET [Объем погашения за период] = sum((SELECT [AMOUNT] from [Данные]) * (((15.00/100.00/12.00)+((15.00/100.00/12.00)/((POWER(1+(15.00/100.00/12.00),12)-1)))))) -- Формула аннуитентных платежей, только как заменить на данные из [Данные], чтобы опять не сругался на "больше одного значения"

WHERE DATE_END from [Данные] >= --Начало месяца. То есть, если фев.17, то >= '2017-02-01'
AND
WHERE DATE_BEGIN from [Данные] <= --Конец месяца. То есть, если фев.17, то <= '2017-02-01'

Собрав конструктор, получаем в поле [Объем погашений за период] WHERE [Период] = 'фев.17' месячную сумму платежей по всем действующим кредитам
...
Рейтинг: 0 / 0
DATEADD
    #39588699
SiмbаTLM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По логике такой запрос должен подойти (после танцев с бубном - нужно для каждого периода заводить первый и последний день):

SELECT SUM(CAST (AMOUNT AS decimal(20,2))) FROM [Task2].[dbo].[Данные задача №2]
WHERE (CAST (DATE_BEGIN AS DATE)) <= --последний день периода
AND DATEADD(month, CAST(term_months AS int), CAST(DATE_BEGIN AS DATE)) >= --первый день периода

Но тип значений поля AMOUNT - varchar, при попытке изменить тип на decimal запрос выдает ошибку:
"Ошибка при преобразовании типа данных varchar к numeric"

Пытался побороть через DECLARE, так как прочитал, что нужно сначала изменить тип, а потом включать в sum. Но не помогло(
...
Рейтинг: 0 / 0
DATEADD
    #39588793
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiмbаTLM,
Вдумайтесь - AMOUNT это сумма. Как сумма может быть varchar?
...
Рейтинг: 0 / 0
DATEADD
    #39589215
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiмbаTLMНо тип значений поля AMOUNT - varchar, при попытке изменить тип на decimal запрос выдает ошибку:
"Ошибка при преобразовании типа данных varchar к numeric"Так там данные лежать кривые. Найти и поправить, потом поменять тип.
...
Рейтинг: 0 / 0
DATEADD
    #39589486
SiмbаTLM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Ага, уже сам понял, спасибо. Изменил через excel в дробных числах запятую на точку - заработало)
...
Рейтинг: 0 / 0
DATEADD
    #39589493
SiмbаTLM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Massa52,

Понимаю, но исходные данные заведены как раз в таких форматах
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DATEADD
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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