Логический вопрос даты

Я разрабатываю биллинговую систему и нуждаюсь в помощи, так как я не знаю здесь. У меня есть несколько клиентов, и оплата их счетов за коммунальные услуги является обязанностью моего банка. В моей системе я регистрирую клиентов в их коммунальной компании вместе со следующими данными.

** Таблица Биллера

Клиент Джош и Ко.

Коммунальная компания А

Потребитель №............... AL12111
Дата выставления счетов .... 07 числа каждого месяца
Дата оплаты счетов ........... 18 числа каждого месяца
Дата отсечения моего банка.. 12-е число каждого месяца

Теперь на экране генерации счетов я принимаю следующие входные данные.

Потребитель № ...... AL12111

Дата ввода счета.. 29-10-2010 (системная дата поля только для чтения)

Клиент .... Джош и Ко.

Расчетный месяц .... Октябрь

Сумма к оплате ... 5000 долларов США

Теперь моя проблема заключается в том, как мне выяснить, генерирует ли бухгалтер счет до истечения срока или нет, но в таблице биллера у меня нет месяца и года, а только дата месяца.

Буду признателен за помощь и совет решения..

Благодарность


person user342944    schedule 02.11.2010    source источник
comment
Дублировать...stackoverflow.com/questions/ 4070281/   -  person JNK    schedule 02.11.2010
comment
Без обид, но: я ничего не понимаю, и ответственность моего банка звучит не очень хорошо. Пожалуйста, скажите, что это домашнее задание.   -  person    schedule 02.11.2010
comment
aBitObvious Я младший программист и только начал свою карьеру в программировании, и это не домашнее задание. Это проблема обучения через форумы? гм   -  person user342944    schedule 02.11.2010
comment
Он обеспокоен (как и я), что кто-то, кто не очень хорошо знает SQL, помогает разрабатывать приложение для финансового учреждения, поскольку избыточность и точность будут очень важны.   -  person JNK    schedule 02.11.2010
comment
Я ожидаю, что у банка будут ресурсы для оказания внутренней поддержки новым младшим программистам по вопросам такого типа.   -  person    schedule 02.11.2010
comment
Работа в команде... это моя маленькая часть, и таким образом каждый человек продвигается вперед с помощью других... Я думаю, это не должно быть серьезной проблемой или писать в разделе часто задаваемых вопросов форума. Новичкам не разрешается задавать вопросы здесь...   -  person user342944    schedule 02.11.2010
comment
@ user342944 - Две вещи. 1 - Новичкам рекомендуется писать здесь. Его беспокоил масштаб того, над чем вы работаете, и деликатность. Если бы кто-то написал, что он новичок в программировании, но работает на правительство над разработкой приложения для управления ядерным оружием, я бы забеспокоился. В вашем случае я просто хочу удостовериться, что не пользуюсь вашим банком :) 2 - Что вам нужно знать, на что вы не ответили в своем предыдущем вопросе?   -  person JNK    schedule 02.11.2010
comment
lol @ JNK ... ну, в моем профиле я сохраняю только все даты (дд) (за каждый месяц), и при вводе данных у меня есть системная дата (месяц выставления счета), поэтому я хотел знать, как сравнить, вводите ли вы до истечения срока или после срок платежа в текущем месяце   -  person user342944    schedule 02.11.2010
comment
Вы бы использовали функцию DATEPART... проверьте msdn.microsoft.com/en -us/library/ms174420.aspx   -  person JNK    schedule 02.11.2010
comment
Ну, пока я заставил это работать до определенного уровня   -  person user342944    schedule 02.11.2010


Ответы (2)


Это не вопрос SQL Server и даже не вопрос программирования — это бизнес-вопрос, на который может ответить только ваш бизнес-аналитик/заинтересованное лицо.

Чтобы расширить, у вас есть дата ввода yyyy-mm-dd (давайте назовем это dt_entry, datetime) и день месяца, в который должен быть выставлен счет, давайте назовем это d (целое число).

Вы должны указать дату в том же месяце, что и дата входа (обратите внимание, что для дат, близких к концу месяца, вам нужно будет получить некоторые разъяснения от бизнеса относительно правил — возможно, используя какое-то скользящее окно). ).

Таким образом, срок выполнения в форме даты будет dt_entry - DAY(dt_entry) + d (дата-время SQL Server может использовать простое целочисленное сложение дней, нет необходимости в DATEADD).

Вы можете видеть, где это вызовет проблему ближе к концу месяца, потому что d будет маленьким (скажем, 1), а дата входа будет большой (скажем, 31), а затем гипотетический срок выполнения действительно следующий месяц. Но что, если человек платит очень рано (например, 5-го числа при сроке погашения 25-го числа)?

Кроме того, вам, возможно, придется подумать о коротких месяцах, поскольку в феврале не может быть 31 февраля.

Все это проблемы программирования, ответы на которые есть только у бизнеса.

person Cade Roux    schedule 02.11.2010
comment
я прошу логику в соответствии со структурой .. новое спасибо всем, кто пытался убедить меня, что я не должен задавать здесь вопросы и учиться построению логики. - person user342944; 02.11.2010
comment
@user342944 user342944 Я подробно рассказал, почему вам нужен бизнес-вклад. - person Cade Roux; 02.11.2010

CREATE PROCEDURE [sp_BillDateCheck]
@CURMONTH VARCHAR(3),
@MONTHNUM INT OUTPUT,
@EBDATEMATCH VARCHAR(90) OUTPUT
AS
BEGIN
DECLARE @ENTRYDATE DATETIME
> SELECT @ENTRYDATE = GETDATE() --ПОЛУЧИТЬ ТЕКУЩУЮ ДАТУ ВХОДА

--ПОЛУЧИТЬ НОМЕР МЕСЯЦА, УКАЗАВ НАЗВАНИЕ МЕСЯЦА
SELECT @MONTHNUM = DATEPART(mm,CAST(@CURMONTH + ' 1900' AS DATETIME))

IF DATEPART(MONTH, @ENTRYDATE) = @MONTHNUM
SELECT @EBDATEMATCH = 'ДАТА ВВОДА И РАСЧЕТНЫЙ МЕСЯЦ ОДИНАКОВЫЕ'

IF DATEPART(MONTH, @ENTRYDATE) ‹ @MONTHNUM
SELECT @EBDATEMATCH = 'ДАТА ВВОДА МЕНЬШЕ РАСЧЕТНОГО МЕСЯЦА'

IF DATEPART(MONTH, @ENTRYDATE) > @MONTHNUM
SELECT @EBDATEMATCH = 'ДАТА ВВОДА БОЛЬШЕ РАСЧЕТНОГО МЕСЯЦА'
END
GO`

спасибо JNK за ​​подсказку DATEPART. я точно не писающий мозг

person user342944    schedule 02.11.2010