Деление по модул – за какво ни е?
Случвало ли ви се е да пресмятате колко часа има в 200 минути? Или колко пълни седмици има в 17 дни? Не е толкова трудно, нали? Един час има 60 минути, следователно в 200 минути има 3 х 60 = 180 минути. И така бързо достигаме до извода, че 200 минути всъщност са 3 часа и 20 минути. По подобен начин е и със 17-те дни. След като в една седмица има 7 дни, то става въпрос за 2 седмици и 3 дни. Чиста логика – ще каже някой. Но на практика е математика.
Сега да си представим, че пред нас се намира една дълга таблица от някаква голяма, наистина много голяма база данни. Примерно таблица в Oracle. Разбира се, може и да е MS SQL server, DB2, Informix, MY SQL, и какво ли още не. В таблицата са записани начално и крайно време на работещи хора почасово и ние трябва да определим по колко часа е работил всеки от тях. Едва ли ще седнем да смятаме ред по ред колко са часовете за всеки работник. Трябва ни формула, която да работи и да бъде вярна. Тогава на помощ идва математиката. Шести клас, втори срок! Или беше 5-ти? 7-ми? Няма значение! Трябва най-напред да изчислим общото време и след това да си го представим във вид, удобен за наше ползване. Обикновено когато имаме записани в различни полета начално и крайно време и извадим началното време от крайното, получаваме число. В повечето случаи числото представлява минутите между двете времена. Тук бъдете внимателни и четете документацията на системата за бази данни, с която работите. Има случаи, в които резултатът е в секунди, и това определя големината на делителя при последващи изчислителни изрази.
И така, нека да посмятаме: примерът е с 200 минути, които сме получили, след като сме извадили от крайното време началното. Колко са пълните часове и колко са оставащите минути, които не съставят пълен час? В един час има 60 минути. Следователно 200/60 = 3.333333333333. Ясно! 3 часа! Ама тия тройки в период са прекалено много и не може ли без тях. ОК, може! Можем да ги скрием някак, но те най-вероятно са онези 20 минути, оставащи до 200, след като 3 х 60 = 180. Значи ще ни трябват! Нека да пробваме да обърнем наклонената черта при делението: 200 \ 60 = 3. Супер! Елиминирахме многото тройки, за да остане само една. И как стана това? Ами много просто – използвахме целочислено деление.
Резултатът при целочислено деление е цялата част на числото при нормално деление. Накратко: обърнахме чертата! Не при всички системи за бази данни обаче обърната наклонена черта за деление е операторът за целочислено деление. Така че пак се допитвайте до документацията. Друг начин да получите цялата част е да използвате функция, която да преобразува дробното число 3.333333333333 в цяло. Т.е. използвате преобразуване типа на резултата и отново ще получите само 3.
Сега да помислим за останалите 20 минути до 200. Това са многото тройки след дробния знак. Тук е мястото на делението по модул: 200 MOD 60 = 20. Страхотно! Но само ако знаете какво връща като резултат делението по модул. За повече информация: http://en.wikipedia.org/wiki/Modulo_operation. Може да го тествате и в Excel. В някои системи за бази данни, както и програмни езици и среди, можете да го срещнете като MODULO. Затова четете си документацията!
И последно: решете сами задачата за това колко са пълните седмици и оставащите дни в 23 дена.
♦ Ако и вие сте database изкушени, попитайте за наличните обучения.