PL/SQL: Полезные функции

Здесь будет памятка по интересным функциям, которые я использовал в своих sql-запросах:

  • age(table1.date)
    Показывает разницу между переданной функцию датой и текущей датой (в формате: кол-во лет, месяцев, дней, часов, минут, секунд).
  • extract(dow from table1.date)
    Получаем день недели в числовом представлении, где началом недели будет являться воскресенье (дни пронумерованы от 0 до 6).
  • extract(isodow from table1.date)
    Получаем день недели в числовом представлении, где началом недели будет являться понедельник (дни пронумерованы от 1 до 7).
  • ST_Centroid(table1.geometry)
    Получаем центр области, обозначенной последовательностью точек (мультилиния, полигон, мультиполигон).
  • ST_X(ST_Centroid(table1.geometry))
    Получаем координату X точки, полученной на предыдущем этапе.
  • ST_Y(ST_Centroid(table1.geometry))
    Получаем координату Y точки, полученной на предыдущем этапе.
  • coalesce(значение1, значение2, значение3)
    Возвращает первое значение из перечисленных, не равное NULL. Если все перечисленные значения будут равны NULL, то результатом тоже вернется значение NULL.

PL/SQL: Количество минут между двумя датами

В рамках одной задачи возникла необходимость посчитать время между двумя датами в PL/SQL-запросе. Ситуация осложнилась тем, что в PL/SQL существует функция months_between, но с помощью нее разницу можно получить только в месяцах, тогда как мне требовался более точный результат — в минутах.

В результате было найдено такое решение:
extract(day from sum("table"."date2" - "table"."date1")) * 1440 + extract(hour from sum("table"."date2" - "table"."date1")) * 60 + extract(minute from sum("table"."date2" - "table"."date1"))

Как преобразовать число в строку в языке запросов 1С

Ранее я уже встречался с проблемой перевода даты в строку в языке запросов 1С. Сегодня при написании запроса в 1C столкнулся с проблемой выражения числа как строки. На просторах сети Интернет я нашел следующее решение, которое сохраню здесь (думаю, что тоже не раз пригодится мне в будущем):

ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(Объект.Число / 100 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(Объект.Число / 1000 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)
+ ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(Объект.Число / 10 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(Объект.Число / 100 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)
+ ПОДСТРОКА("0123456789", 1 + Объект.Число - (ВЫРАЗИТЬ(Объект.Число / 10 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)
+ "."
+ ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(Объект.Число / 0.1 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(Объект.Число / 1 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)
+ ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(Объект.Число / 0.01 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(Объект.Число / 0.1 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)
+ ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(Объект.Число / 0.001 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(Объект.Число / 0.01 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)
+ ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(Объект.Число / 0.0001 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(Объект.Число / 0.001 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)
+ ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(Объект.Число / 0.00001 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(Объект.Число / 0.0001 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)
+ ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(Объект.Число / 0.000001 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(Объект.Число / 0.00001 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)

Установка приложений Microsoft в Ubuntu

Для установки Skype, VSCode и Microsoft Edge в ОС Ubuntu достаточно выполнить в терминале следующую последовательность команд:
wget https://packages.microsoft.com/keys/microsoft.asc
sudo apt-key add microsoft.asc
wget https://repo.skype.com/data/SKYPE-GPG-KEY
sudo apt-key add SKYPE-GPG-KEY
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main"
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
sudo add-apt-repository "deb [arch=amd64] https://repo.skype.com/deb stable main"
sudo apt update
sudo apt install microsoft-edge-stable
sudo apt install skypeforlinux
sudo apt install code

Установка «Яндекс Браузера» в Ubuntu

Для установки Яндекс Браузера в ОС Ubuntu достаточно выполнить в терминале следующую последовательность команд:
udo add-apt-repository "deb https://repo.yandex.ru/yandex-browser/deb stable main"
curl https://repo.yandex.ru/yandex-browser/YANDEX-BROWSER-KEY.GPG --output YANDEX-BROWSER-KEY.GPG
sudo apt-key add YANDEX-BROWSER-KEY.GPG
sudo add-apt-repository "deb [arch=amd64] http://repo.yandex.ru/yandex-browser/deb beta main"
sudo apt update
sudo apt install yandex-browser-stable

Ошибка отрисовки SynEdit при расположении на форме справа

Сегодня я столкнулся с ошибкой отрисовки компонента SynEdit. При этом стоит оговориться, что при использовании SynEdit из оригинального репозитория такой проблемы нет. Я устанавливал себе TurboPack SynEdit (версия 2021.08) через менеджер пакетов GetIt в среде разработки Embarcadero Delphi 10.4 Community Edition. Использую при этом операционную систему MS Windows 11 (21H2).

Ошибка проявляется следующим образом:

  1. Свойство Align компонента TSynEdit равно значению alRight.
  2. Свойство WindowState компонента TForm переводим в значение wsMaximized.

Чтобы устранить эту проблему, временно использую в обработчике формы TForm.OnResize процедуру перерисовки компонента TSynEdit при изменении размеров окна:
SynEdit1.Repaint;

UPDATE 07.01.2022: Озвученная ошибка была исправлена 19 ноября. Пока пакет TurboPack SynEdit не обновился в менеджере пакетов GetIt, можно скачать и установить вручную свежую версию из репозитория проекта.

Как выразить дату как строку в языке запросов 1C

Сегодня при написании запроса в 1C столкнулся с проблемой выражения даты как строки. Операции «Выразить как строка» и «Представление» не работали, сообщая о несовместимости типов данных. Но на просторах сети Интернет я нашел следующее решение, которое сохраняю здесь (думаю, что не раз пригодится мне в будущем):
ПОДСТРОКА("0123456789", ДЕНЬ(&Дата) / 10 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ДЕНЬ(&Дата))) / 6 + 1, 1)
+ "."
+ ПОДСТРОКА("0123456789", МЕСЯЦ(&Дата) / 10 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МЕСЯЦ(&Дата))) / 6 + 1, 1)
+ "."
+ ПОДСТРОКА("0123456789", ГОД(&Дата) / 1000 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.06)) / 6 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.6)) / 6 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 6)) / 6 + 1, 1)

Iskratel RT-GM-3: пароль суперадминистратора

Update 2022.06.07: На прошивке 1.6.935 этот способ уже не работает.

Одним из популярных роутеров у Ростелекома является модель Iskratel RT-GM-3. В числе обладателей этого роутера после подключения доступа к сети Интернет от Ростелекома оказался и я. И если Вы считаете себя продвинутым пользователем, Вам наверняка понадобится доступ к настройкам этого роутера. Логин и пароль администратора для доступа к настройкам роутера указаны на наклейке на дне самого устройства. Однако, как оказалось, стандартная запись администратора не имеет доступа ко всем настройкам роутера, а имеет статус «Продвинутый пользователь». Чтобы получить полный доступ к изменению настроек, необходимо зайти в настройки роутера под учетной записью суперадминистратора. Однако, логин и пароль суперадминистратора спрятаны в настройках для администратора. Тем не менее, имеется способ получить логин и пароль суперадминистратора.

Для этого нужно выполнить следующие шаги:

  1. Зайти в настройки роутера под стандартной учетной записью администратора.
  2. Перейти по следующей ссылке:
    http://192.168.0.1/maintenance/mt_admin_manufacturer_tl.htm
  3. На открывшейся вкладке будут указаны логин и пароль не только стандартного администратора, но и суперадминистратора.

Решение проблем после обновления до Windows 11 21H2 (build 22000.51)

Приветствую своих читателей! Сегодня мы поговорим о решении проблем с операционной системой после обновления до Windows 11. Я столкнулся на данный момент пока только с двумя проблемами, которые удалось решить. Обновление производилось при переключении на Dev-канал обновлений в ОС Windows 10 21H1, при обновлении установилась сборка Windows 11 21H2 build 22000.51. Ниже описание решения тех проблем, с которыми я столкнулся:

  1. Не открывается системное приложение «Параметры».
    После обновления ОС не запускается системное приложение «Параметры». Также, что логично, не открываются настройки экрана и персонализации, которые находятся также в этом приложении. Для решения проблемы делаем следующее:

    1. Запускаем терминал Windows PowerShell.
    2. Выполняем в терминале PowerShell следующую команду:
      Get-AppXPackage | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}
    3. Перезагружаем операционную систему.
  2. Циклический запуск Проводника после загрузки рабочего стола.
    Update 14.07.2021. Данная проблема сохраняется на сборке 22000.65.
    Оказалось, что данная проблема встречается только на ноутбуках, где в интерфейсе ОС установлена русская локализация, а аккумулятор ноутбука заряжен на 100%. Для решения этой проблемы придется переключиться на английскую локализацию системы (надеюсь, что в будущем эту проблему исправят). Итак, делаем следующее:

    1. Отключаем ноутбук от зарядного устройства и ждем разрядки аккумулятора хотя бы на один процент, когда Проводник перестанет циклически перезапускаться.
    2. Открываем системное приложение «Параметры».
    3. Переходим в раздел «Время и язык» (Time & language).
    4. Открываем подраздел «Язык и регион» (Language & region).
    5. Добавляем английский язык (США) и загружаем для него языковой пакет (если еще не загружен).
    6. В пункте «Язык интерфейса Windows» (Windows display language) переключаемся на английский язык.
    7. Перезагружаем операционную систему.
    8. После перезагрузки мы вновь сможем пользоваться зарядным устройством.

Других проблем на этой сборке Windows 11 я пока не заметил.

Как восстановить представление папок в Outlook

После одного из крайних обновлений Office 365 столкнулся с тем, что Outlook автоматически применил новое представление некоторых папок в Outlook. Нашел в сети Интернет довольно простое решение, как вернуть старое привычное представление. Нужно закрыть Microsoft Outlook и в командной строке выполнить лишь одну команду:
outlook.exe /cleanviews

После выполнения выше указанной команды откроется Outlook с привычным нам представлением папок, восстановленным с настройками по умолчанию.

Убираем окно авторизации в учетной записи Microsoft в приложении Outlook

В последнее время Microsoft Outlook 2019 и Microsoft Outlook 365 (версия 16.0) при работе через протокол Microsoft Exchange начали выдавать окно с требованием авторизоваться в учетной записи Microsoft. Если закрыть окно, то письма не скачиваются и не отправляются. Нашел в сети Интернет довольно простое решение данной проблемы. Нужно в командной строке выполнить лишь одну команду:
reg add HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\AutoDiscover /t REG_DWORD /v ExcludeExplicitO365Endpoint /d 1

После выполнения этой команды такое окно перестало выдаваться, работа почтового клиента нормализовалась.

Решение ошибки «Security boot fail» на ноутбуках Acer

В последнее время на ноутбуках фирмы Acer (в частности, на моделях Acer Aspire 3) стал встречаться с ошибкой «Security boot fail» при попытке загрузиться с USB-накопителя.

Для решения данной проблемы нужно проделать следующую последовательность действий:

  1. При включении ноутбука жмем клавишу F2, чтобы войти в настройки BIOS.
  2. На вкладке «Security» выбираем пункт «Set supervisor password» и назначаем пароль (пароль запомните!)
  3. Активируем пункт «Erase all secure boot settings»
  4. Пункт «Security boot mode» изменится на «Custom».
  5. Нажимаем клавишу F10 (сохранить настройки и выйти).
  6. При перезагрузке ноутбука снова жмем клавишу F2, вводим установленный ранее пароль.
  7. На вкладке «Security» снова выбираем пункт «Set supervisor password»
  8. Вводим сначала старый пароль, а следующие два поля оставляем пустыми (переход клавишей Enter). Таким образом мы уберем пароль.
  9. На вкладке «Main» включаем пункт «F12 Boot menu», устанавливая значение «Enabled».
  10. Снова нажимаем клавишу F10 (сохранить настройки и выйти).
  11. При перезагрузке ноутбука жмем клавишу F12, чтобы вызвать загрузочное меню и выбрать загрузку с вашего USB-накопителя.

S

Ошибка при прошивке Google Nexus 7 (2013) Wi-Fi

Сегодня попался в руки планшет Google Nexus 7 (2013) Wi-Fi, на котором необходимо было поставить стоковую прошивку. Стоковая прошивка шьется через fastboot. Однако, во время процесса стоковой прошивки MOB30X на этапе прошивки userdata выдается ошибка «Bogus size sparse and chunk header». При последующем старте планшет уходит в «бутлуп» (циклическая перезагрузка на старте).

Чтобы исправить эту ошибку, сначала распаковываем архив image-razor-mob30x.zip, содержащийся в прошивке MOB30X.

После чего в командной строке выполняем последовательно следующие команды:
fastboot erase userdata
fastboot flash userdata userdata.img
fastboot erase cache
fastboot flash cache cache.img
fastboot reboot

После данных операций «бутлупа» нет. Нужно просто подождать некоторое время, пока произойдет первый долгий старт планшета.

Установка Redmine 4.0 на Ubuntu 18.04

В данной статье рассматривается мой первый опыт установки Redmine. Используемое в статье программное обеспечение:

  • Предустановленная операционная система Ubuntu 18.04 x64
  • Предустановлен OpenSSH
  • СУБД PostgreSQL
  • Веб-сервер Nginx
  • Фреймворк Ruby on rails
  • Redmine 4.0

Читать далее »

Обнуление счетчика тонера на принтерах Brother

На днях у родственников возникла проблема с принтером Brother MFC-1810R. После перезаправки стартового картриджа принтер требует заменить тонер. Чтобы решить эту проблему, на принтере необходимо обнулить счетчик тонера. Так как картридж TN-1075 распространен среди устройств Brother, то описанная здесь инструкция подойдет для моделей DCP-1510R, DCP-1512R, HL-1110R, HL-1112R, MFC-1810R, MFC-1815R.
Читать далее »

Как сменить ключ установленной Windows 8.1

…или как активировать Windows 8.1 лицензионным ключом от Windows 8. Данный пост может пригодиться тем, кто имеет ключ от Windows 8 и установил Windows 8.1 на свой компьютер. Проблема заключается в том, что во время установки Windows 8.1 «старый» ключ от Windows 8 не примется. Зато его можно будет заменить уже после установки ОС, и он будет действителен при прохождении процедуры активации Windows. В этом случае вам не нужно будет устанавливать Windows 8 и производить обновление до Windows 8.1 через магазин Windows Store, а можно сразу произвести «чистую» установку более новой версии ОС.

Для успешного прохождения активации Windows 8.1 с ключом от Windows 8 выполните следующий порядок действий:

  1. Запускаем командную строку с правами администратора.
  2. Выполните команду:
    slmgr -ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    где значения, обозначенные символом X, замените вашим ключом.
  3. Выполните команду:
    slui 4
  4. Активируйте Windows по телефону или онлайн.