+1 - это Oracle. Подноготная всего этого такова: В Аксапте все сравнения строк и сортировки по определению case insensitive. В MS SQL этот эффект достигается установкой case-insensitive кодовой страницы БД. В Oracle аналогичной функциональности долгое время не было (хотя, говорят,в 10 версии что-то появилось). Поэтому в старых версиях Аксапты (2.1,2.5) при записи в любое поле, которое было включено в индекс, данные переводились в нижний регистр, что изрядно нервировало пользователей (Как-то неприятно когда ФИО в emplId пишется и выводится на экран в нижнем регистре) . Поэтому начиная с версии Аксапта 3.0 (которая работала с ораклом 9 и выше, в котором уже можно было строить индекс не по полю, а по функции от поля), при указании в запросе сравнения по строчному полю или сортировки/группировки по таковому, поле заключается в функцию NLS_LOWER. Кроме того, при построении индексов, вместо строчных полей туда включается значение NLS_LOWER от поля. Таким образом - в большинстве случаев, в отличие от старых версий Аксапты, для пользователя незаметны внутренние махинации системы с регистром. Единственное исключение - как раз группировка. Ведь если мы сгруппировали по NLS_LOWER(emplId), то в списке полей в select мы тоже должны указать NLS_LOWER(emplId), поскольку в список полей агреггирующего запроса можно включать только значения выражений группировки и агрегатные функции. Поэтому, если строчное поле включено в список группировки, то и в списке группировки и в список полей в запросе оно включается с помощью NLS_LOWER()
|