|
Не работает LEFT(<Поле>,AT(".",<Поле>))
|
|||
---|---|---|---|
#18+
Необходимо в запросе из данных, типа 123.456.7 выбрать только то, что находится до первой точки. Конструкции могут быть очень разного типа и без точек и с одной точкой Конструкция типа Left(alltrim(docs_1.doc_num),(AT('.',alltrim(docs_1.doc_num))-1)) ; не работает, выдает только первый символ. Хотя AT('.',alltrim(docs_1.doc_num)) выдает правильное значение и Left(alltrim(docs_1.doc_num),3) тоже выдает правильно. В чем проблема или как решить по другому может быть ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2012, 13:53 |
|
Не работает LEFT(<Поле>,AT(".",<Поле>))
|
|||
---|---|---|---|
#18+
У меня все работает Код: sql 1. 2.
ищи в окружающем коде ошибку. Cкобок зачем столько? Так читабельнее Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2012, 14:00 |
|
Не работает LEFT(<Поле>,AT(".",<Поле>))
|
|||
---|---|---|---|
#18+
SAS_Z(AT('.',alltrim(docs_1.doc_num))Fox лишние скобки воспринимает как макроподстановку. И что там он себе навоспринимал - фиг его знает :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2012, 14:19 |
|
Не работает LEFT(<Поле>,AT(".",<Поле>))
|
|||
---|---|---|---|
#18+
Jonny540Fox лишние скобки воспринимает как макроподстановку. И что там он себе навоспринимал - фиг его знает :) С чего это вдруг скобки макроподстановкой стали? В примере ТС все работает с лишними скобками, читать только такой код тяжело. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2012, 14:21 |
|
Не работает LEFT(<Поле>,AT(".",<Поле>))
|
|||
---|---|---|---|
#18+
Начиная с VFP7 введена функция GetWordNum(), которая ищет "слова" по указанным "разделителям". По умолчанию, разделителем "слов" считается пробел. Но вполне можно указать в качестве разделителя и точку Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2012, 14:45 |
|
Не работает LEFT(<Поле>,AT(".",<Поле>))
|
|||
---|---|---|---|
#18+
ВладимирМ, Dima TС чего это вдруг скобки макроподстановкой стали?Если можно, проясните ситуацию. У меня работают как &, так и скобки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2012, 15:24 |
|
Не работает LEFT(<Поле>,AT(".",<Поле>))
|
|||
---|---|---|---|
#18+
ВладимирМ Код: sql 1.
GetWordNum() нездоровая функция для разбора строки с разделителями. Несколько разделителей подряд она считает одним, разделитель на первом месте игнорирует: Код: sql 1. 2. 3.
Jonny540Dima TС чего это вдруг скобки макроподстановкой стали?Если можно, проясните ситуацию. У меня работают как &, так и скобки. Я так подозреваю что замена в коде макроподстановки на переменную в скобках в некоторых случаях у тебя отложилось как "скобки это макроподстановка". Это не так. Наиболее частое использование это в командах с файлами. Там изначально синтаксис нездоровый. Например Код: sql 1. 2. 3. 4.
т.е. в третьем варианте скобки указывают фоксу взять содержимое переменной, но это не макроподстановка. Там где изначально предусмотрено брать содержимое переменной без разницы возьмешь ты ее в скобки или нет. Макроподстановка - это когда сначала в текст команды вставляется содержимое переменной а потом то что получилось выполняется. Скобки во всех выражениях выполняют такую же роль как и в других языках - определение порядка выполнения команд. И лишние скобки никак не влияют на результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2012, 15:52 |
|
Не работает LEFT(<Поле>,AT(".",<Поле>))
|
|||
---|---|---|---|
#18+
Ну, выкрутиться всегда можно. Например, добавив ведущий пробел перед выделением "слова". Код: sql 1. 2.
А в данном случае я подозреваю проблема в том, что конструкция с AT() была использована в Select-SQL. А для Select-SQL размерность полей будущей выборки определяется по первой попавшейся записи. Вот видимо в первой записи либо вообще не оказалось значения, либо оказалось значение из одного символа. Для исправления проблемы надо явным образом указать итоговую размерность либо через CAST(), либо через PADR() Код: sql 1. 2.
Разумеется, здесь 10 - это условная величина. Вместо нее надо поставить максимально возможную размерность для определяемого значения. Вероятно, это будет размерность самого поля docs_1.doc_num ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2012, 18:18 |
|
Не работает LEFT(<Поле>,AT(".",<Поле>))
|
|||
---|---|---|---|
#18+
Спасибо всем. У меня достаточно жесткий формат строк, поэтому и GetWordNum также решает задачу. И проблема действительно было в этом select PADR(Left(alltrim(docs_1.doc_num), AT('.',alltrim(docs_1.doc_num))-1), 10) ; выбирает правильно поля. Еще раз всем спасибо, особенно Владимиру. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 16:27 |
|
|
start [/forum/topic.php?fid=41&msg=37935650&tid=1583474]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 276ms |
total: | 417ms |
0 / 0 |