powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Переделать на SQL строку из фокса
26 сообщений из 26, показаны все 2 страниц
Переделать на SQL строку из фокса
    #38588997
Scorp1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В фоксе есть такая строка

q=AT('ТП ',stroka,1)
z=len(stroka)-q

itog = left(z,stroka)

если одной строкой то
itog = left(len(stroka)-AT('ТП ',stroka,1),stroka)

как эту строчку переделать на SQL

SELECT left(len(stroka)-AT('ТП ',stroka,1),stroka)
from date
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589187
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
функция выполняет какой-то бред:
Код: sql
1.
q=AT('ТП ',stroka,1) 

ищем место первого вхождения подстроки 'ТП ' в строку
Код: sql
1.
z=len(stroka)-q 

находим длину оставшейся части (вместе с подстрокой, кстати)
Код: sql
1.
itog = left(z,stroka) 

выбираем вобще хрен пойми что:
во-первых, у функции лефт() первый аргумент - строка, второй-число. то есть так, как написано, работать не будет вообще
во-вторых, даже если написать правильно, то выбирается хрен пойми что
на примере:
строка="12345ТП 6"; q=6; z=9-6=3; itog="123"
Вам точно это надо? Может, всё-таки right? Или не надо найденную позицию отнимать от длины строки?
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589193
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуть не забыл: если надо переделать на скл, то вопрос лучше задавать в подфоруме по той СУБД, на диалект которой надо перевести.
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589194
Scorp1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извиняюсь конечно right справа все надо выбрать то что после "ТП " и до конца строки
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589196
Scorp1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у них могут и не знать язык фокса
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589213
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorp1978,

Код: sql
1.
select iif(instr(stroka,'ТП ')=0,stroka,mid(stroka,instr(stroka,'ТП ')) as st_TP from tab1
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589255
Scorp1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже с учетом последней скобочки все равно ошибку дает
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589260
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorp1978у них могут и не знать язык фокса
если запрос на фоксе, то так и пиши
только добавь PADR() для дополнения пробелами до одинакового размера (иначе размером будет размер первой)
и у left() аргументы перепутаны
Код: sql
1.
SELECT padr(left(stroka, len(stroka)-AT('ТП ',stroka,1)), 100) as itog from date


Только по сути бред получается: например
len(stroka) = 100
AT('ТП ',stroka,1) = 90 т.е. 90й символ "T", 91 "П"
100 - 90 = 10
т.е. ты берешь левые 10 потому что с 90 го "ТП "

если надо обрезать по "ТП " то так
Код: sql
1.
SELECT padr(stroka, left(AT('ТП ',stroka), stroka), 100) as itog from date
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589265
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Твою ошибку с left() повторил в конце :)

если надо обрезать по "ТП " то так
Код: sql
1.
SELECT padr(stroka, left(stroka, AT('ТП ',stroka)), 100) as itog from date
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589270
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да чтож такое ... так правильно:

если надо обрезать по "ТП " то так
Код: sql
1.
SELECT padr(left(stroka, AT('ТП ',stroka)), 100) as itog from date
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589337
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorp1978,

доработка
Код: sql
1.
2.
select instr(stroka,'ТП'),stroka,
 iif(instr(stroka,'ТП')=0,stroka,mid(stroka,instr(stroka,'ТП'))) as st_TP from tab1



Expr1000strokast_TP1тп 12тп 1201261264129тптп
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589385
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorp1978,

для левого варианта

Код: sql
1.
2.
3.
4.
SELECT InStr(stroka,'ТП') AS позиция, tab1.stroka,
 IIf(InStr(stroka,'ТП')=0,stroka,
 IIf(InStr(stroka,'ТП')=1,'',left(stroka,InStr(stroka,'ТП')-1))) AS st_TP
FROM tab1;



Expr1000strokast_TPпримеч1тп 12а разрешен ли null01261264129тп129312тп3312
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38589460
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА,

в фоксе нет функций InStr(), mid(), это ваши UDF-функции, поэтому надо прикладывать их код вместе с примерами где они используются.
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590086
Scorp1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
instr(obgr.GroupName,'ТП ') вот эта конструкция не работает (SQL Server)
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590087
Scorp1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запрос формируется в фоксе а обрабатывает SQL
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590162
dimag@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разместите на сервере и будет вам счастье
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590165
dimag@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разместите на сервере и будет вам счастье http://www.universalthread.com/ViewPageNewDownload.aspx?ID=29527
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590230
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorp1978,

в SQL Server нет Instr.
А CHARINDEX('ТП ', obgr.GroupName) есть.
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590235
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorp1978instr(obgr.GroupName,'ТП ') вот эта конструкция не работает (SQL Server)
Ты сначала пойми как у тебя работает, затем поймешь что где спрашивать. Работает так:
Если запрос выполняет фокс, то синтаксис запроса - синтаксис фокса.
Если запрос выполняет SQL Server то синтаксис запроса - синтаксис SQL Server`а. Для фокса это просто строка символов.
SQL Server какой? MSSQL, MySQL, Oracle, PostgreSQL ? У каждого свой синтаксис и он совпадает до тех пор пока тебе не потребуется выйти за рамки описанные в стандарте SQL
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590263
Scorp1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TScorp1978instr(obgr.GroupName,'ТП ') вот эта конструкция не работает (SQL Server)
Ты сначала пойми как у тебя работает, затем поймешь что где спрашивать. Работает так:
Если запрос выполняет фокс, то синтаксис запроса - синтаксис фокса.
Если запрос выполняет SQL Server то синтаксис запроса - синтаксис SQL Server`а. Для фокса это просто строка символов.
SQL Server какой? MSSQL, MySQL, Oracle, PostgreSQL ? У каждого свой синтаксис и он совпадает до тех пор пока тебе не потребуется выйти за рамки описанные в стандарте SQL


"запрос выполняет SQL Server" - да, "SQL Server какой? MSSQL" - да
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590271
Scorp1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CHARINDEX('ТП ', obgr.GroupName) - заработал
iif - неработает, как в целом выражение будет выглядеть?
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590284
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorp1978iif - неработаетвместо
Код: sql
1.
iif(условие, результат1, результат2)

можно использовать
Код: sql
1.
case when условие then результат1 else результат2 end
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590286
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorp1978"запрос выполняет SQL Server" - да, "SQL Server какой? MSSQL" - да
Ну так и надо это указывать в первом посте. Еще лучше сразу спросить в форуме по MS SQL. Только фокс упоминать не надо, просто опиши решаемую задачу.
Тут тоже подскажут, т.к. с фоксом многие MSSQL используют. Я не подскажу, плохо знаю тонкости MSSQL.
вместо iif у MSSQL есть case ... end
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590388
Scorp1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
case when CHARINDEX('ТП ', obgr.GroupName)>0 then результат1 else '' end
как результат1 записать

case when CHARINDEX('ТП ', obgr.GroupName)>0
then left(len (obgr.GroupName)-CHARINDEX('ТП ',obgr.GroupName),obgr.GroupName)
else '' end AS ktp

вот ошибку про неверный тип пишет
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590391
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorp1978,

опять вы в лефт() перепутали аргументы местами...
...
Рейтинг: 0 / 0
Переделать на SQL строку из фокса
    #38590400
Scorp1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
case when CHARINDEX('ТП ', obgr.GroupName)>0
then right(obgr.GroupName,len (obgr.GroupName)-CHARINDEX('ТП ',obgr.GroupName)-2)
else '' end AS ktp

все я победил, вернее МЫ, всем спасибо за терпение и подсказки.
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Переделать на SQL строку из фокса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]