Блог Александра Башкирова

ИТ и бизнес, компьютеры и ПО, фото, программирование и просто мысли…
Этот сайт в основном посвящен тому, что мне интересно вне работы. Ведется в порядке хобби.
Все изложенное на сайте - мое частное оценочное мнение и не может быть истолковано иначе.
Со всеми вытекающими из этого последствиями.

Срок проекта

Просмотров: 11307Комментарии: 0
IT Blogs

Один из самых тонких моментов при планировании проекта - оценка времени его реализации. Есть мнение, часто приводимое в качестве шутки: "Время, необходимое для реализации проекта в случае аутсорсинга, представляет собой время, заявленное партнерами, умноженное на случайное число в диапазоне от экспоненты до пи". Надо признать, что порой и при самостоятельном выполнении проекта длительность реализации (выполнения) получаются несколько больше заявленной. (На моей памяти были "долгострои", когда время выполнения проекта как самостоятельно, так и внешним подрядчиком, отличалось от расчетного раза в 2. Конечно, два - это не совсем экспонента (e=2,7), но близко. Традиционно возникает вопрос: почему? Или, в другой интерпретации: кто виноват и что делать?

Вопросы на самом деле взаимосвязанные. У любого проекта есть заказчик и исполнитель - как в случае аутсорсинга, так и в случае внутренней разработки. Срок реализации проекта - величина,  определяемая в основном исполнителем. (При условии выполнения заказчиком техничских требований исполнителя по обеспечению проекта). В случае аутсорсинга одна из типичных ситуаций - объявление изначально меньших (нереальных) сроков проекта исполнителем с целью "взять заказ" ("желание клиента - закон, заодно и заработаем"). При этом сумма проекта увеличивается на  возможные штрафы (заказчику об этом, разумеется, не сообщают). Вторая, тоже типичная, причина - несостоятельность исполнителя в части планирования сроков (то ест  срок заявляется без изначального желания его увеличения, но потом уселичивается - "в силу объективных причин", или, п още говоря, ошибок при планировании). Третья - изменившиеся обстоятельства, такие, как: изменение заказчиком требований после начала проекта (особенно этим грешат проекты без ТЗ), возникновение препятствий финансового характера (бюджет урезали, или никогда такого и не было - ситуация, характерная для случая заключения договоров по этапам), невыполнение заказчиком своих обязательств (технических требований по обеспечению проекта), изменение внутренних "политических" течений у заказчика или исполнителя, смена ключевых фигур на проекте с той и другой стороны.

Парадоксально, но выходов из ситуации, когда сорваны сроки практически нет (так как ситуация уже есть). Поэтому, отвечая на вопрос "что делать", стоит иметь в виду, что все меры, принимаемые для предотвращения срыва сроков, можно условно разделить на две большие группы: "упреждающие" и "постфактум". Упреждающие меры - это меры, принимаемые до начала проекта. В частности, это может быть детальный план работ, с контролем по срокам и качеству вплоть до каждой мелкой работы, серьезные штрафные санкции в случае несвоевременного (и/или некачественного) выполнения работ, даже в случае минимальной просрочки. Меры, принимаемые постфактум, чем-то напоминают упреждающие. В частности, к мерам постфактум относятся определение стратегии в отношении проекта (продолжаем ли делать вообще, может быть, его проще и дешевле свернуть), оценка шансов его реализации, совместное с исполнителем составление детального плана работ и жесткое ему следование. Хорошим рычагом воздействия на исполнителя становятся штрафные санкции (которые в договоре лучше прописывать так, что их взимание должно быть на усмотрение заказчика).

Конечно, в теории все это выглядит довольно красиво. На практике же с ситуацией, когда сроки превышают мыслимые пределы, бороться довольно сложно. И "крайний" (с точки зрения руководства) находится довольно легко, и общая обстановка не располагает к возвышенной философии - закончить бы проект. Но, несмотря ни на что, проекты делаются, решения внедряются, а жизнь - продолжается. Что не может не радовать.

Оригинал и комментарии: ITBlogs.ru

Плагин для WordPress – “Alib 404 notify”

Просмотров: 3679Комментарии: 3
Wordpress

"Alib 404 Notify" - простой плагин, который базируется на коде плагине "404 Notifier" от Alex King (http://alexking.org/projects/wordpress). Принцип работы плагина очень прост - после установки он посылает письмо администратору сайта в случае, если произошла 404 ошибка. В отличие от оригинального плагина, письмо шлется только после перехода на 404 страницу, а не при срабатывании любого редиректа. (У меня на сайте, в связи с переходом на новый движок, активно используется 301 редирект, на который и реагировал "404 Notifier" от Alex King).

Установка:

Распакуйте и скопируйте файл "404.php" в "/plugins/alib_404" папку на сайте. Активируйте плагин через менеджер плагинов Wordpress. После этого включите строку:

<?php if (function_exists('alib_404')) {alib_404();} ?>

последней строкой в файл "404.php" Вашей темы. Все:)

Скачать (версия 1 от 15.03.2008)

Wine Doors. Непростая дверь Wine.

Просмотров: 8164Комментарии: 0
Linux

Данная статья безнадежно устарела. Оставляена для истории.

Есть на свете такая замечательная вещь, как wine. По сути, Wine - открытая реализация Windows API. Что позволяет запускать Windows-приложения под Linux. Вследствие того, что проект Wine находится в стадии вечного развития, то реализованное в нем API поддерживает далеко не все приложения. Кстати, установка нового Windows-приложения под Wine - занятие довольно веселое, так как, например, тому же IE для работы требуются куча библиотек - от MS шрифтов до DCOMa.

Собственно, герой сегодняшнего поста - Wine Doors (http://www.wine-doors.org/wordpress/) - это утилита, которая позволяет автоматизировать установку поддерживаемых Wine приложений. На момент написания поста Wine-Doors существует в версии 0.1.2.1 и распространяется в исходных текстах, deb и rpm пакетах.

Правда, традиционно к стакану меда примешивается ложка дегтя: установка wine-door у меня лично прошла весьма своеобразно. В частности, первая установка у меня закончилась ничем. То есть, wine-doors установился, запустился, и при попытке первого запуска - завис. Вторую установку - запустил в терминале из-под root'a - установка и первый запуск прошли успешно. Учитывая то, что (по-моему) wine ставит свой набор Windows-программ для каждого пользователя попробовал запустить установку из-под себя. В результате - зависание на этапе первого запуска. Попробовал переписать /home/root/.wine-doors в свою аналогичную домашнюю папку. Не помогло;)

Разочаровался, снес из-под root'a все папки .wine-doors. Убил пакет wine-doors. Поставил его еще раз. Запустил. Первый запуск прошел успешно! (Правда, он проходил часа полтора, так как выяснилось, что wine-doors тянет за собой кучу всяких приблуд с Сети), не распространяясь об этом:) Отследить сие явление можно, лишь запустив wine-door из терминала или по лог-файлу. Итог - дошел до стадии, когдаWine-doors бодро предложил мне список приложений, которые он готов установить (кстати, они распространяются в виде так называемых application pack, то есть некоторого готового к употреблению и разворачиванию под Wine суррогата, выложенного в репозитории на сайте разработчика Wine-doors).

Скриншот - Wine Doors

Общий итог: продукт "сырой". Но нужный. Если вы сможете победить его, то есть шанс съэкономить себе чуть-чуть времени на установке Windows-программ под Linux.

PS. При работе с Wine-doors желательно иметь в виду, что его производительность довольно низка (у меня разбор одного из application pack'ов занял часа три).

PSS. Альтернативный простой способ установки ТОЛЬКО IE под Linux - использовать специальный пакет IE4Linux (http://www.tatanka.com.br/ies4linux/page/Main_Page). Пакет предназначен исключительно для установки IE 5, 5.5, 6.0 под Linux посредством Wine. Работает на данный момент понятнее и стабильнее, чем Wine-doors.

Запущена новая версия сайта.

Просмотров: 2421Комментарии: 0
Alib.spb.ruНовости

Событие для меня в некотором смысле знаковое, поскольку был осуществлен перенос сайта со старой cms на новую (написанную не мной), и отказаться от подхода "все свое", доверив свои данные коду незнакомых разработчиков. Правда, при этом я научился писать wordpress-плагины и темы, разобрался со структурой таблиц и, в самых общих чертах - с механизмом генерации и кеширования. Сайт же "переехал" практически без потерь, приобретя:

- отдачу новостей в rss (эта возможность есть как класс, но пока не аннонсировалась, то есть кнопочки нет);

- wap/pda интерфейс;

- консолидацию с другими блогами (в частности, у меня на сайте теперь успешно "живут" мои посты с профессионального блога на ITBlogs - http://www.itblogs.ru/blogs/bashkirov);

- более стильный и функциональный интерфейс (внешний вид - полностью собственная разработка; файлы с кодом взяты за основу от темы Colorful от Wordpress Theme Land - http://wpthemeland.com/themes/colorful/);

- Возможность проведения опросов и голосований;

- Возможность простого наращивания функциональности - "чужими" или "своими" плагинами.

В настоящий момент полностью запущена новая версия сайта, но функционирует некоторая часть старого - пока еще доступны некоторые страницы старой версии. Их постепенно становится все меньше по мере тестирования и установки редиректа.

Из "фишек" стоит отметить флеш-галерею, куда перенесены все фото со старого сайта. Таким образом я решил "спрятать" старые фото, которые вроде как и "не очень" с одной (художественной) стороны, и выкинуть жаль - с другой.

Более подробная информация о сайте - располагается на странице "О сайте":)

Продажа проектов

Просмотров: 2407Комментарии: 0
IT Blogs

Будучи консультантом, мне частенько приходилось продавать. В переносном смысле. Проект, идею, концепцию, алгоритм... Убеждать в том, что предлагаемое - оптимально, и реализуемо. В том, что ключевыми факторами успеха являются поддержка руководства и донесенная до потребителей полезность системы. Естественно, проект реализуется не безвозмездно, и приходилось продавать бюджет, обосновывая его, что называется "от и до". Заказчик обычно выдвигал контраргументы, высказывал опасения, соглашался, отказывался, договаривался... В общем, "жизнь бурлит и бьет ключем".

Кстати, заказчик обычно был представлен сотрудниками ИТ и бизнес-подразделений, а также руководством - то есть основными потребителями, вдохновителями и эксплуататорами продаваемой идеи/решения. Каждый из них находился в своей проблемной плоскости, соответственно, монологи и дискуссии о конкретном решении проходили, исходя из задач, стоящих перед конкретными подразделениями/пользователями.

Работа в "реальном бизнесе", в отделе управления проектами департамента ИТ оператора связи, натолкнула меня на интересную мысль: ведь мы (внутренние "проектанты") тоже продаем. Точно также - в переносном смысле. Продаем проект, идею, концепцию, алгоритм... Убеждаем в том, что предлагаемое - оптимально, и реализуемо. Существенная разница состоит лишь в том, что нашего заказчика мы хорошо знаем; его проблемы и задачи нам гораздо понятнее и ближе - так как это в том числе и наши проблемы и задачи. Кроме того, совпадают наши стратегические цели. А еще - нам также начинают продавать. Те же внешние менеджеры/продавцы/консультанты, убеждающие нас, что именно их решение - лучшее, что именно они способны привести проект к успеху... Получается в некотором смысле замкнутый круг.

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

Получается: "не внедряйте, да не внедряемы будете":)

Оригинал и комментарии: ITBlogs.ru

Оценка эффективности внедрения

Просмотров: 3042Комментарии: 0
IT Blogs

Любопытно, кто и как оценивает эффективность внедрения той или иной информационной системы?

Я, например, стараюсь подобрать KPI, которые в максимальной степени связаны с областью, в которой происходит автоматизация. Например, при внедрении Service Desk такими критериями будут являться время разрешения инцидента (оно, по идее, должно уменьшится) и количество претензий пользователей (оно, по идее, тоже должно уменьшится). В случае системы управления поручениями - количество совещаний, и т.д.

При этом общим правилом при выборе KPI для каждого случая является выявление и определение количественных параметров связанных с информационной системой сервисов, и их оценка - до и после внедрения.

Самый интересный вопрос, который возникает в такой ситуации - а когда (в какой момент) измерять KPI? Наиболее общий подход (и, с моей точки зрения, наиболее верный в смысле показательности) - накопление статистики за максимально большой срок и отслеживание динамики изменения требуемого индикатора. Такой подход на большом временном промежутке позволит не только сделать вывод о изменении количественных показателей, но и провести качественную оценку и оценить возможные тенденции изменения отслеживаемого показателя. Если же привести полученную статистику к некоторому базису (за него я обычно выбираю KPI "в начале пути", то есть результат самого первого измерения моего индикатора), то получим наглядную динамику: как быстро и насколько изменился KPI.

Накопленная такого рода информация позволит в дальнейшем делать предварительные оценки и задавать целевые показатели эффективности планируемых аналогичных внедрений, и, вообще говоря, принимать решения о целесообразности тех или иных внедрений.

Оригинал и комментарии: ITBlogs.ru

Строковые функции mySQL

Просмотров: 14267Комментарии: 0
Wordpress

ASCII (str)

Возвращает значение кода ASCII крайнего левого символа строки str. Возвращения 0, если str - пустая строка. Возвращает пустое значение (NULL), если str является пустой:

mysql> SELECT ASCII('2');
        -> 50
mysql> SELECT ASCII(2);
        -> 50
mysql> SELECT ASCII('dx');
        -> 100

ORD (str)

Функция подобна ASCII. Если крайний левый символ строки str - многобайтовый символ, возвращает код для того символа, рассчитанный в зависимости от значений кода ASCII составляющих его символов, используя эту формулу: ( (первый код ASCII байта) *256 + (второй код ASCII байта) ) [*256+третий код ASCII байта]. Если крайний левый символ - не многобайтовый символ, возвращает то же самое значение, что и функция ASCII ().

mysql> SELECT ORD('2');
        -> 50

CONV (N, from_base, to_base)

Конвертирует числа между различными основаниями. Возвращает строковое представление числа N, конвертированный с основания from_base в основание to_base. Возвращает пустой результат (NULL), если любой параметр является NULL (ПУСТЫМ). Параметр N интерпретируется как целое число, но может быть определен как строка. Минимальное основание - 2, максимальное основание - 36. Если to_base – отрицательное число, то N расценивается как число со знаком. Иначе, N расценивается как число без знака. Функция CONV работает с точностью на 64 бита:

mysql> SELECT CONV("a",16,2);
        -> '1010'
mysql> SELECT CONV("6E",18,8);
        -> '172'
mysql> SELECT CONV(-17,10,-18);
        -> '-H'
mysql> SELECT CONV(10+"10"+'10'+0xa,10,10);
        -> '40'

BIN(N)

Возвращает строковое представление двоичного значения N, где N имеет тип BIGINT. Эта функция эквивалентна следующему вызову функции CONV: CONV (N, 10,2). Возвращает пустое значение, если N является пустым значением (NULL):

mysql> SELECT BIN(12);
        -> '1100'

OCT(N)

Возвращает строковое представление восьмеричного значения N, где N имеет тип BIGINT. Это эквивалентно вызову CONV: CONV (N, 10,8). Возвращает пустое значение (NULL), если N является пустым (NULL):

mysql> SELECT OCT(12);
        -> '14'

HEX(N_or_S)

Если N_OR_S - число, возвращает строковое представление шестнадцатеричного значения N, где N имеет тип BIGINT. Это эквивалентно CONV (N, 10,16. Если N_OR_S - строка, возвращает шестнадцатеричную строку N_OR_S, где каждый символ в N_OR_S преобразован в 2 шестнадцатеричных цифры.

mysql> SELECT HEX(255);
        -> 'FF'
mysql> SELECT HEX("abc");
        -> 616263
mysql> SELECT 0x616263;
        -> "abc"

CHAR(N,...)

Функция CHAR интерпретирует параметры как целые числа и возвращает строку, состоящую из символов, каждый из которых представлен значениями кода ASCII заданных целых чисел. Пустые (NULL) входные значение параметров пропускаются

mysql> SELECT CHAR(77,121,83,81,'76');
        -> 'MySQL'
mysql> SELECT CHAR(77,77.3,'77.3');
        -> 'MMM'

CONCAT (str1, str2...)

Результат работы данной функции - объединение строк-параметров. Возвращает пустое значение (NULL), если любой параметр является пустым значением (NULL). Может иметь больше чем 2 параметра. Числовые параметры преобразуются в эквивалентную строковую форму:

mysql> SELECT CONCAT('My', 'S', 'QL');
        -> 'MySQL'
mysql> SELECT CONCAT('My', NULL, 'QL');
        -> NULL
mysql> SELECT CONCAT(14.3);
        -> '14.3'

CONCAT_WS(separator,str1,str2,...)

CONCAT_WS () - это, по сути, специальная форма CONCAT (). Функция производит объединение всех параметров, кроме первого, который используется как разделитель между остальными параметрами. Разделитель может быть строкой или числом. Если разделитель является пустым (NULL), результат будет ПУСТОЙ (NULL). Функция пропустит любые пустые параметры. Разделитель будет добавляться между строками, которые будут связаны:

mysql> SELECT CONCAT_WS(",","First name","Second name","Last Name");
       -> 'First name,Second name,Last Name'
mysql> SELECT CONCAT_WS(",","First name",NULL,"Last Name");
       -> 'First name,Last Name'

LENGTH(str), OCTET_LENGTH(str), CHAR_LENGTH(str), CHARACTER_LENGTH(str)

Возвращает длину строки str:

mysql> SELECT LENGTH('text');
        -> 4
mysql> SELECT OCTET_LENGTH('text');
        -> 4

BIT_LENGTH (str)

Возвращает длину строки str в битах:

mysql> SELECT BIT_LENGTH('text');
        -> 32

LOCATE(substr,str), POSITION(substr IN str)

Возвращает позицию первого вхождения подстроки substr в строку str. Возвращает 0, если подстрока substr не найдена:

mysql> SELECT LOCATE('bar', 'foobarbar');
        -> 4
mysql> SELECT LOCATE('xbar', 'foobar');
        -> 0

В MySQL 3.23 эти функции чувствительны к регистру, в то время как в 4.0 регистр учитывается, если любой параметр - двоичная строка. LOCATE(substr,str,pos)

Возвращает позицию первого вхождения подстроки substr в строку str, начиная с позиции pos. Возвращения 0, если substr подстрока не найдена:

mysql> SELECT LOCATE('bar', 'foobarbar',5);
        -> 7

В MySQL 3.23 эти функции чувствительны к регистру, в то время как в 4.0 регистр учитывается, если любой параметр - двоичная строка. INSTR (str, substr)

Возвращает позицию первого вхождения подстроки substr в строку str. Это то же самое, что и LOCATE () с двумя параметрами, за исключением того, что параметры меняются:

mysql> SELECT INSTR('foobarbar', 'bar');
        -> 4
mysql> SELECT INSTR('xbar', 'foobar');
        -> 0

В MySQL 3.23 эти функции чувствительны к регистру, в то время как в 4.0 регистр учитывается, если любой параметр - двоичная строка. LPAD(str,len,padstr)

Возвращает строку str, с пристыкованной слева строкой padstr. Если str более длинна, чем len, тогда результат будет обрезан до len символов

mysql> SELECT LPAD('hi',4,'??');
        -> '??hi'

RPAD(str,len,padstr)

Возвращает строку str, дополненную справа строкой padstr. Если str более длинна, чем len, тогда результат будет обрезан до len символов

mysql> SELECT RPAD('hi',5,'?');
        -> 'hi???'

LEFT(str,len)

Возвращает крайние len левых символов строки str:

mysql> SELECT LEFT('foobarbar', 5);
        -> 'fooba'

RIGHT(str,len)

Возвращает крайние len правых символов строки str:

mysql> SELECT RIGHT('foobarbar', 4);
        -> 'rbar'

SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len), MID(str,pos,len)

Возвращает подстроку строки str длиной len символов, начинающейся с позиции pos. Различная форма использования этой функции введена для совместимости с ANSI SQL92 синтаксисом:

mysql> SELECT SUBSTRING('Quadratically',5,6);
        -> 'ratica'

SUBSTRING(str,pos), SUBSTRING(str FROM pos)

Возвращает подстроку строки str,начинающуюся в позиции pos.

mysql> SELECT SUBSTRING('Quadratically',5);
        -> 'ratically'
mysql> SELECT SUBSTRING('foobarbar' FROM 4);
        -> 'barbar'

SUBSTRING_INDEX(str,delim,count)

Возвращает подстроку из строки str при count появлении разделителя delim. Если count положительное число, то возвращается все символы слева от последнего разделителя. Если count -отрицателен, то возвращается все символы справа от последнего разделителя:

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
        -> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
        -> 'mysql.com'

LTRIM (str)

Возвращает строку str с удаленными слева пробелами:

mysql> SELECT LTRIM('  barbar');
        -> 'barbar'

RTRIM (str)

Возвращает строку str с удаленными справа пробелами:

mysql> SELECT RTRIM('barbar   ');
        -> 'barbar'

TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)

Возвращает строку str со всеми remstr префиксами и/или прибавляет удаленный. Если ни один из спецификаторов BOTH | LEADING | TRAILING не указан, по умолчанию принимается BOTH. Если не определен параметр remstr, то он по умолчанию принимается равным пробелу.

mysql> SELECT TRIM('  bar   ');
        -> 'bar'
mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
        -> 'barxxx'
mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
        -> 'bar'
mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
        -> 'barx'

SOUNDEX (str)

Возвращает soundex строку для str. Две строки, которые кажутся почти тем же самым, должны иметь идентичные soundex строки. Стандартная soundex строка - 4 символа длины, но SOUNDEX (), функция возвращает строку произвольной длины. Все неалфавитно-цифровые символы игнорируются. Все международные алфавитные символы вне диапазона A-Z обработаны как гласные:

mysql> SELECT SOUNDEX('Hello');
        -> 'H400'
mysql> SELECT SOUNDEX('Quadratically');
        -> 'Q36324'

SPACE(N)

Возвращает строку, состоящую из N пробелов:

mysql> SELECT SPACE(6);
        -> '      '

REPLACE(str,from_str,to_str)

Возвращает строку str со всеми всеми возникновениями строки from_str замененный строкой to_str:

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
        -> 'WwWwWw.mysql.com'

REPEAT(str,count)

Возвращает строку, состоящую из строки str, повторенной count раз. Если count <= 0, возвращает пустую строку. Возвращает пустое значение (NULL), если str или count являются пустыми (NULL):

mysql> SELECT REPEAT('MySQL', 3);
        -> 'MySQLMySQLMySQL'

REVERSE(str)

Возвращает строку, представляющую собой строку str наоборот.

mysql> SELECT REVERSE('abc');
        -> 'cba'

INSERT(str,pos,len,newstr)

Возвращает строку str, с подстрокой, начинающейся в позиции pos и длиной len символов, замененных строкой newstr:

mysql> SELECT INSERT('Quadratic', 3, 4, 'What');
        -> 'QuWhattic'

ELT(N,str1,str2,str3,...)

Возвращет str1, если N = 1, str2, если N = 2, и так далее. Возвращает пустое значение (NULL), если N меньше чем 1 или больше чем номер параметров. ELT() - дополнение для функции FIELD():

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
        -> 'ej'
mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
        -> 'foo'

FIELD(str,str1,str2,str3,...)

Возвращает индекс str в str1, str2, str3... списке. Возвращения 0, если str не найден.

mysql> SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
        -> 2
mysql> SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
        -> 0

FIND_IN_SET (str, strlist)

Возвращает значение от 1 до N, если строка str находится в списке strlist состоящий из N подстрок. Строковый список - строка, составленная из подстрок, отделенных символами `,' . Если первый параметр - постоянная строка, и второй - столбец типа множество, функция FIND_IN_SET () будет использовать разрядную арифметику! Возвращается 0, если str не находится в strlist или если strlist - пустая строка. Возвращается NULL, если любой параметр является ПУСТЫМ (NULL). Эта функция не будет работать корректно, если первый параметр содержит символы `,'

mysql> SELECT FIND_IN_SET('b','a,b,c,d');
        -> 2

MAKE_SET (BITS, str1, str2...)

Возвращает набор (строка, содержащая подстроки, отделенные `,' символами), состоящий из строк, которые имеют соответствующие биты в наборе BITS. str1 соответствует биту 0, str2 к биту 1, и т.д. ПУСТЫЕ (NULL) строки в str1, str2... не добавляются к результату:

mysql> SELECT MAKE_SET(1,'a','b','c');
        -> 'a'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
        -> 'hello,world'
mysql> SELECT MAKE_SET(0,'a','b','c');
        -> ''

EXPORT_SET(bits,on,off,[separator,[number_of_bits]])

Возвращает строку, где для каждого множества битов в bits, вы получаете строку on, и для каждого бита сброса Вы получаете off строку. Каждая строка отделена separator (значение по умолчанию,'') и используется только number_of_bits (значение по умолчанию 64) битов:

mysql> SELECT EXPORT_SET(5,'Y','N',',',4)
        -> Y,N,Y,N

LCASE(str), LOWER(str)

Возвращает строку str со всеми символами, замененными на символы нижнего регистра согласно текущему отображению набора символов (значение по умолчанию - ISO-8859-1 Latin1):

mysql> SELECT LCASE('QUADRATICALLY');
        -> 'quadratically'

UCASE(str), UPPER(str)

Возвращает строку str со всеми символами, замененными на верхний регистр согласно текущему отображению набора символов (значение по умолчанию - ISO-8859-1 Latin1):

mysql> SELECT UCASE('Hej');
        -> 'HEJ'

LOAD_FILE (file_name)

Читает файл и возвращает содержание файла как строку. Файл должен быть на сервере, Вы должны определить полное имя пути к файлу, и Вы должны иметь привилегию на чтение file_name. Файл должен быть доступен для чтения всеми и быть меньшим чем, max_allowed_packet. Если файл не существует или не может читаться из-за одной из вышеупомянутых причин, функция возвращает NULL:

mysql> UPDATE tbl_name
           SET blob_column=LOAD_FILE("/tmp/picture")
           WHERE id=1;

Если Вы не используете MySQL Версию 3.23, Вы должны сделать чтение файла в вашем приложении и создать инструкцию INSERT, чтобы модифицировать базу данных с информацией файла. Один способ сделать это, если Вы используете MySQL ++ библиотека, может быть найден в http://www.mysql.com/documentation/mysql++/mysql++-examples.html.

QUOTE(str)

Добавляет символ <обратный слэш> (\) для того, чтобы выдать корректный результат.

mysql> SELECT QUOTE("Don't");
        -> 'Don\'t!'
mysql> SELECT QUOTE(NULL);
        -> NULL

Функции mySQL для работы со строками

Перевод оригинальной документации взятой на http://www.mysql.com

Перевод: © 2002 by Башкиров Александр http://www.alib.spb.ru