Висловити число як рядок і дату як рядок в запиті

Пропонується новий і більш компактний метод перетворення дати і числа в рядок в запиті

У мові запитів відсутні вбудовані функції перетворення одних типів даних в інші, наприклад, рядків в числа або дати і навпаки. У роботі «Висловити рядок як число і рядок як дату в запиті» були запропоновані досить компактні способи перетворень «з рядка». Тепер дійшла черга до зворотних до них перетворень «в рядок».

Основною проблемою даного перетворення в рядок є виділення кожного конкретного розряду вихідного числа. Наприклад, число 123 складається з трьох розрядів. Нехай розряди нумеруються справа наліво, починаючи з нуля. Розряди відрізняються вагою: нульовий розряд в десяткової позиційної системі числення має вагу 1, перший - 10, другий - 100 і так далі. Для виділення кожного розряду потрібно знайти ціле від ділення числа на вагу розряду, а потім - залишок від ділення отриманого цілого на 10. Перший (другий зліва) розряд, таким чином, вийде так: 123 розділимо на 10, отримаємо 12,3. Потім візьмемо ціле, отримаємо 12. Потім знайдемо залишок від ділення на 10, отримаємо 2 - шуканий перший (другий зліва) розряд. Буквальна запис цих виразів в запиті виходить дуже і дуже громіздкою, але існує інший шлях.

Цей шлях полягає у використанні для знаходження залишку від ділення пари функцій: СЕКУНДА і ДОБАВІТЬКДАТЕ. Справа в тому, що функція СЕКУНДА фактично є функцією залишку від ділення на 60 числа секунд, що пройшов з початку часів. Щоб перетворити її в функцію розрахунку залишку від ділення на 10 досить вважати секунди шістками. Тобто необхідна функція буде записуватися так:

Ця функція виділяє найправіший (нульовий) розряд числа Ікс. Щоб виділити перший розряд, потрібно використовувати функцію

А щоб виділити другий - функцію

І так далі. Множник 60 дозволяє виділити розряд десятих часток, 600 - сотих і так далі.

Обмеженням розглянутого підходу є максимальне число секунд при роботі з датами. Воно таке, що ми можемо виділити не більше 10-ти десяткових знаків в числі. Якщо число значущих знаків більше, вихідне число буде потрібно попередньо розділити на дві частини «звичайним» способом з використанням операції ВИРАЗИТИ ЯК.

Наведемо приклад запиту для випадку ЧИСЛО (8, 2)

Щоб зробити запис трохи коротшою, дві постійні - ланцюжок цифр «0123456789» і початок часів можна винести у вкладений запит

Аналогічним чином можна перетворити число в рядок в двійковій системі числення. Ось запит для запису у вигляді рядка восьми молодших двійкових розрядів заданого числа:

Побічним наслідком використаних закономірностей є те, що вираз

можна використовувати в запиті для перевірки парності числа Ікс.

Для перекладу дати в рядок досить перевести в рядок окремо число днів, місяців і років вихідної дати. У підсумку виходить наступний запит

Як видно, використовувані для перетворення в рядок вирази досить прості і компактні, особливо якщо порівняти їх з тим, що доводилося використовувати до цих пір.

Схожі статті