|
|
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
Есть большая таблица MY_TABLE (строк порядка 120 млн.). Один из столбцов по имени RECEIPT хранит в поле числа (номер чека), но тип столбца VARCHAR2(15). Создал процедуру, внутри которой идёт выборка данных из этой таблицы таким образом: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Тимлид сказал, что в этом селекте я допустил грубую ошибку, так как здесь идёт неявное преобразование строки в число (или быть может чисел A1 и A2 в строку!?). Так ли это и как по вашему нужно писать данный селект? P.S. Проектировщик БД не я. Я бы никогда не стал хранить число как строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 07:52 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
PL SQL НовичокТимлид сказал, что в этом селекте я допустил грубую ошибку, так как здесь идёт неявное преобразование строки в число (или быть может чисел A1 и A2 в строку!?). Так ли это и как по вашему нужно писать данный селект? Проверить то не сложно, чтоб не верить людям на слово Код: plsql 1. 2. 3. 4. 5. 6. 7. PL SQL НовичокP.S. Проектировщик БД не я. Я бы никогда не стал хранить число как строку. Я бы никогда - Выдыет опытного, матерого архитектора БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 08:14 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
PL SQL НовичокТимлид сказал, что в этом селекте я допустил грубую ошибку, так как здесь идёт неявное преобразование строки в числоГрубую ошибку сделал архитектор. Само по себе неявное преобразование не так страшно. Но в данном случае RECEIPT преобразуется к числу и как следствие: 1) не может быть использован индекс; 2) если где-то в RECEIPT есть нечисло, то запрос всегда будет падать. Это всё следствие быдлоархитектуры, но со вторым можно бороться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 08:15 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
если на поле RECEIPT индекс, лучше так: Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 08:20 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
Fogelлучше так:Новичок, не смотри тот говнокод, он скрывает PL SQL Новичокгрубую ошибку:PL SQL Новичок Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 08:36 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
Fogelесли на поле RECEIPT Я вдруг стал как все? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 08:51 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
MaximaXXLORA-01722: invalid number С этим проблем нет, там хранятся только валидные числа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:02 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
ElicГрубую ошибку сделал архитектор. Само по себе неявное преобразование не так страшно. Но в данном случае RECEIPT преобразуется к числу и как следствие: 1) не может быть использован индекс; 2) если где-то в RECEIPT есть нечисло, то запрос всегда будет падать. Это всё следствие быдлоархитектуры, но со вторым можно бороться. Согласен с вами. Но пункт 2 исключается, так как там только валидные числа. Поэтому мой вопрос актуален - как бы вы написали этот селект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:03 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
PL SQL НовичокНо пункт 2 исключается, так как там только валидные числа.Классика. Что такое "валидньіе числа"? 4.5 - валидное число? А 4,5? А 1 500 455,15? А е^-1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:14 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
PL SQL Новичоккак бы вы написали этот селект?Проблема не в самом запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:22 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
jan2ary, Валидные целые положительные числа, записанные исключительно с использованием символов из множества { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } По существу вопроса будет что сказать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:24 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
ElicPL SQL Новичоккак бы вы написали этот селект?Проблема не в самом запросе.Согласен с вами. Мой тимлид считает, что проблема именно в моём селекте. Он так и сказал: "грубая" ошибка! Я сразу понял, что никакой "грубой" ошибки я не совершал, но спорить не стал - это у нас не поощряется. Мне даже было рекомендовано ознакомиться с ссылкой http://www.sqlbooks.ru/Articles03/sqloracle02_ru.htm Но и там я не нашёл ничего, что свидетельствовало бы о "грубой" ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:28 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
ну можешь а1 и а2 в строку конвертировать, если тимлида это устроит в случае целых числами вроде будет тот же результат хотя думай сам, это уже посимвольное сравнение строк Код: sql 1. православнее было бы явно конвертировать RECEIPT в число, предварительно проверив содержимое Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:31 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
PL SQL Новичокjan2ary, Валидные целые положительные числа, записанные исключительно с использованием символов из множества { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } По существу вопроса будет что сказать?Тогда обьявить А1 и А2 как varchar2 и дело в шляпе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:33 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
PL SQL Новичоксчитает, что проблема именно в моём селекте.Сколько строк, как предполагается, возвращает запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:34 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
yabs, Я пока сделал так Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:34 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
ElicPL SQL Новичоксчитает, что проблема именно в моём селекте.Сколько строк, как предполагается, возвращает запрос?не более 10000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:35 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
PL SQL НовичокМой тимлид считает, что проблема именно в моём селекте. Он так и сказал: "грубая" ошибка! и он прав никто тебе не даст гарантию, что номера чеков не станут вдруг текстовыми ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:36 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
yabsникто тебе не даст гарантию, что номера чеков не станут вдруг текстовымия уже несколько раз повторял, что в этом поле всегда будут целые положительные числа. Сколько раз мне нужно написать эту фразу? Я уже понял, что архитектор погорячился, но один фиг, будут только числа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:40 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
PL SQL Новичок, Вы рассуждаете ... странно, то что Вы не знали в какую сторону идет преобразование - я порекомендовал проверить, и получил ответ "С этим проблем нет, там хранятся только валидные числа." Вы спрашиваете как Вам решить вашу задачу ... а я ее пока не вижу .... У чисел и строк разные подходы ... Пример 1: Код: plsql 1. 2. 3. 4. 5. 6. 7. Пример 2: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. Я например понятия не имею что Вас попросили найти/сравнить но строки и числа сравниваются по разному ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:41 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
MaximaXXLстроки и числа сравниваются по разномуя в курсе MaximaXXLчто Вас попросили найти/сравнитьсравнение должно проходить так, как если бы поле RECEIPT был бы INTEGER ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:43 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
PL SQL НовичокElicСколько строк, как предполагается, возвращает запрос?не более 10000RTFM too_many_rows ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:44 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
PL SQL НовичокЯ пока сделал так Код: plsql 1. А оно именно так и работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:44 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
Elic, Сорри, я не так объяснил. Там только агрегатные функции, которые вычислены над подмножеством, состоящим из не более чем 10000 строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:47 |
|
||
|
Число хранится как текст. Как написать выборку с использованием between?
|
|||
|---|---|---|---|
|
#18+
ElicPL SQL Новичокпропущено... не более 10000RTFM too_many_rows типа такого Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 09:51 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39537235&tid=1885079]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 504ms |

| 0 / 0 |
