|
Помогите переместить данные по полям
|
|||
---|---|---|---|
#18+
Доброй ночи! Есть база, в ней одно из полей содержит данные, которые необходимо поместить в другие поля. Задача состоит в том, что нужны только уникальные трехзначные цифровые значения. Алгоритм действий я примерно понимаю - делаем вхождение в первую строчку, ищем уникальное число, состоящее только из трех знаков, проверяем свободно ли определенное поле(dom1) и реплейсим туда это число. Далее берем второе число из этой строчки, проверяем уникально ли оно для этой строчки и если да, проверяем свободно ли поле(dom1), если в этом поле есть запись, пишем в следующее(dom2). Затем следующее число в поле(dom3) и так далее. Во вложении файл с данной таблицей. К сожалению, на данный момент времени, моих знаний не достаточно, что бы единолично разобраться и решить данную задачу. Очень надеюсь на Вашу помощь. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2014, 05:13 |
|
Помогите переместить данные по полям
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2014, 05:41 |
|
Помогите переместить данные по полям
|
|||
---|---|---|---|
#18+
Трехзначные числа так искать Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2014, 07:21 |
|
Помогите переместить данные по полям
|
|||
---|---|---|---|
#18+
AlexGood Зачем вам вторая таблица, все эти накрутки. Работайте со строкой, нюансы подправьте. В таблицу, если надо, потом переведете. LOCAL lcReturn,lcString,lcStr,lnVal lcReturn = REPLICATE('#',1000) SCAN lcString = ALLTRIM(table1.field1) FOR i = 1 TO LEN(lcString) - 3 lcStr = SUBSTR(lcString,i,3) lnVal = VAL(lcStr) IF lnVal > 99 AND OCCURS(lcStr,lcReturn) = 0 lcReturn = STUFF(lcReturn,AT('#',lcReturn,lnVal)+1,0,',' + lcStr) ENDIF ENDFOR ENDSCAN RETURN SUBSTR(CHRTRAN(lcReturn,'#',''),2) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2014, 15:12 |
|
Помогите переместить данные по полям
|
|||
---|---|---|---|
#18+
Доброй ночи! Спасибо огромное. Куда двигаться ясно, дальше, как говориться, по азимуту ..... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2014, 00:31 |
|
Помогите переместить данные по полям
|
|||
---|---|---|---|
#18+
Вообще-то, не факт, что номер дома будет именно трехзначным. Скорее, правило поиска номера дома звучит так: Номер дома - это первое число после запятой, вне зависимости от количества знаков. Номер заканчивается любым символом отличным от цифры Исходя из этого правила, получить список уникальных номеров домов можно так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2014, 00:38 |
|
Помогите переместить данные по полям
|
|||
---|---|---|---|
#18+
ВладимирМ Осталось совсем малость, например: 'д21,д21/1,д22,д22а' Сколько в этой строке номеров домов? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2014, 12:55 |
|
Помогите переместить данные по полям
|
|||
---|---|---|---|
#18+
AlexGood123 С этой проблемой, хоть и сумбурно, вы разобрались. Но при таком бессистемном хранении данных при любом обращении к ним будут подобные проблемы. Такие таблицы не должны существовать, номера домов и квартир должны иметь соответствующее поля. Строки как и цифры тоже сортируются, достаточно будет индексов. Адрес может быть также записан как одно строковое выражение через программно устанавливаемые разделители. Упорядочить ваши данные можно так: FOR i = 1 TO GETWORDCOUNT(lcString,',') lcStr = GETWORDNUM(lcString,i,',') REPLACE table1.field1 WITH GETWORDNUM(lcStr,1,' '), table1.field2 WITH GETWORDNUM(lcStr,2,' ') ENDFOR И приводить в порядок данные по необходимости: REPLACE ALL field1 WITH SUBSTR(field1,2) FOR LEFT(field1,1)=='д' И т.д. Кстати, некоторые угловые дома могут иметь двойную адресацию: Улица1, д. 37/43 или Улица2, д. 43/37. Заметим, что у вас в таблице есть и такие номера домов: д.120к.1, д.271 кор.2, д.116 стр.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 01:59 |
|
|
start [/forum/topic.php?fid=41&fpage=27&tid=1582465]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
112ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 306ms |
total: | 504ms |
0 / 0 |