Почему бы тебе просто не применить силу и не сделать жизнь проще :-)? Все это должно работать:
select
date(timestamp('2019-01-02')),
date(timestamp('2019-01-02 00:00:00')),
date(timestamp(null)))
Итак, в вашем выражении if null:
SELECT
IFNULL(OnSite.worksite_id, Documents.worksite_id) as `Worksite`,
IFNULL(date(datetime(OnSite.timestamp)),date(datetime(Documents.timestamp))) as `Date`,
COUNT(Documents.worksite_id) as `Users_on_Site`,
COUNT(DISTINCT OnSite.uid) as `Completed`
FROM OnSite
LEFT JOIN Documents ON OnSite.worksite_id = Documents.worksite_id AND DATE(datetime(OnSite.timestamp)) = DATE(datetime(Documents.timestamp))
GROUP BY `Date`, `Worksite`;
Да, это просто с этой целью. Однако Вы будете, вероятно, видеть проблемы совместимости, если Вы решите к созданию путей по длине MAX_PATH. Например, оболочка проводника и командная строка (по крайней мере, на XP, я не знаю о Vista), не может обработать пути по той длине и возвратит ошибки.
Я писал код Windows с 1995, и хотя я знаю о том префиксе, я никогда не находил причины использовать его. Увеличение длины пути вне MAX_PATH
кажется, единственная причина его, и ни я, ни любой из клиентов моих программ никогда не делали так к моему знанию.
Лучшее использование для этого метода не должно, вероятно, создавать новые файлы, но управлять существующими файлами, которые кто-то еще, возможно, создал.
Я управлял файловым сервером, который обычно будет получать файлы с path_length > MAX_PATH
. Вы видите, пользователи видели файлы как H:\myfile.txt
, но на сервере это было на самом деле H:\users\username\myfile.txt
. Таким образом, если пользователь создал файл с точно MAX_PATH
символы, на сервере это было MAX_PATH+len("users\username")
.
(Создание файла с символами MAX_PATH не таким образом редко, с тех пор при сохранении веб-страницы на Internet Explorer, это использует название страницы в качестве имени файла, которое может быть, вполне жаждут некоторых страниц).
Кроме того, при совместном использовании диска (через сеть или usb) с Mac или машиной Linux, можно оказаться с файлами с именами как довод "против", prn или lpt1. И снова, префикс позволяет Вам, и Ваши сценарии обрабатывают те файлы.
Я думаю, что первая вещь отметить является этим "\\? \" не делает путь путем UNC. Вы были более точными во второй раз при вызове этого путем в стиле UNC. Но даже затем, подобие только прибывает из наличия двух обратных косых черт в запуске. Это действительно не имеет никакого отношения к UNC. Это сохранено тем, что необходимо использовать еще больше символов для получения пути UNC с "\\? \" префикс.
Я думаю, что у Вас есть вся причина использования того префикса. Это снимает предел максимальной длины, как описано в статье, которую Вы процитировали. И это только относится к путям Unicode; пути не-Unicode не добираются для предотвращения предела при помощи того префикса.
Одна вещь отметить состоит в том, что префикс не позволяется для относительных путей, только для абсолютных. Вы могли бы хотеть перепроверить те свои почести библиотеки C то ограничение.