|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
С интербейзом/firebird столкнулся первый раз (сам пишу на Оракле). Дано БД firebird ODS version 10.0 Надо инсертным запросом записать в поле типа varchar число в десятичном виде. Число изначально - четыре байта в HEX, типа 0xFEBA09D2 Попробовал cast-ом: CAST('0xFEBA09D2' as integer ) работает почти как надо но нет UNSIGNED INTEGER a BIGINT и INT64 в этой версии не поддерживаются. Ok, подумал я, есть же всякие NUMERIC и DECIMAL, взял здесь на форуме процедуру HEX2INT, немного модернизировал ее чтоб возвращала VARCHAR а промежуточное число хранила в DECIMAL. Но столкнулся с тем, что не могу нормально преобразовать DECIMAL в VARCHAR Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Как преобразовать DECIMAL в строку без дробных частей и эскпоненциальной записи? Сейчас преобразование делаю CAST-ом Код: sql 1. 2. 3.
Или может проще способы есть? P.S. Никаких внешних библиотек я в том месте установить не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 17:00 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Migelle, переходи на свежую версию firebird (2.5.4) там такие вещи работают Код: sql 1.
или пиши свою UDF ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 17:06 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Hello, Migelle! You wrote on 29 июня 2015 г. 17:10:51: Migelle> Дано БД firebird ODS version 10.0 > Попробовал cast-ом: CAST('0xFEBA09D2' as integer ) работает почти как надоу тебя ODS не от этой версии FB. как так вышло? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 17:12 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Migelle, вполне вероятно, что раз старая база (ods 10), то в ней первый диалект. А следовательно, decimal использованное тобой разрядности хранится в double precision, т.е. в вещественном числе. Используй INT вместо DECIMAL, в int как раз 4 байта, целое, и не будет никаких дробей. А ты влепил decimal(15,8) и хочешь чтобы дробной части не было? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 17:18 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Hello, Kdv! You wrote on 29 июня 2015 г. 17:25:11: Kdv> Используй INT вместо DECIMAL он хочет DWORD (unsigned) а INT ему даст -21362222. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 17:26 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
МимопроходящийHello, Kdv! You wrote on 29 июня 2015 г. 17:25:11: Kdv> Используй INT вместо DECIMAL он хочет DWORD (unsigned) а INT ему даст -21362222. Код: sql 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 19:07 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Hello, Zeromq! You wrote on 29 июня 2015 г. 19:14:57: Zeromq> as bigint на ODS 10.0, ага. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 19:14 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
МимопроходящийHello, Zeromq! You wrote on 29 июня 2015 г. 19:14:57: Zeromq> as bigint на ODS 10.0, ага. С FB 1.5 у нас bigint появился? Я уж и забыл... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 19:53 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Мимопроходящийу тебя ODS не от этой версии FB. как так вышло? Да я не разбираюсь в версиях. Просто выяснил, что ODS версии 10.0. Посмотрел кому это соответствует - было написано Interbase 6-6.5 или firebird 1.0 Вот из этих исходных данных и пытаюсь решить задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 20:33 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Симонов ДенисMigelle, переходи на свежую версию firebird (2.5.4) там такие вещи работают Это не моя БД и переход не возможен. Симонов Денисили пиши свою UDF Непонятно что именно писать. А как вообще в то время обходились без long-ов? Даже кларион, который подревнее, их имел в то время. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 20:39 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Симонов Денистам такие вещи работают Код: sql 1.
В этой версии, кстати, такой cast тоже работает, только нет подходящего типа :( ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 20:42 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
MigelleЭто не моя БД и переход не возможен. Firebird 2.5 умеет работать с ODS 10. Про Firebird 1.0 говорить малоперспективно. Вопрос в том, что надо получить в итоге. Либо это будет геморрой с 1.0, либо это будет проще с 2.5. MigelleА как вообще в то время обходились без long-ов? если в базе диалект 1, то максимально большое целое - INT. Если в базе диалект 3, то BIGINT. http://www.ibase.ru/ibfaq.htm#dial ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 20:48 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
MigelleПопробовал cast-ом: CAST('0xFEBA09D2' as integer ) работает почти как надо но нет UNSIGNED INTEGER a BIGINT и INT64 в этой версии не поддерживаются.1. UNSIGNED INTEGER нет в SQL Standard 2. BIGINT - это синоним для NUMERIC(18, 0), и он тебе не нужен для 4-х байтных чисел - достаточно 10 знаков 3. Попробуй добавить лидирующий 0 в свою константу: CAST('0x0FEBA09D2' as NUMERIC(15, 0)) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 20:50 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Проверил себя - всё зависит от диалекта БД. В 1-ом не получится. В 3-ем получится даже с BIGINT. PS поддержка "Hexadecimal Numeric and Binary String Literals" появилась в 2.5, посему в версии FB я не сомневаюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 20:58 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Migelle, не знал что это в 1.0 работало. Значит с нативными 16 ричными литералами перепутал. Код: sql 1.
кстати в трёшке это работает даже в 1 диалекте. А вот так же не пропускает Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2015, 20:58 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Так все-таки, если отвлечься от типов, пусть будет NUMERIC Как его нормально в строку преобразовать? Неужели в firebird нет нормальных функций форматирования строк? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 08:03 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
MigelleНеужели в firebird нет нормальных функций форматирования строк?а в оракле есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 08:20 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
roadster, есть. Насколько они нормальные это уже другой вопрос. В стандарте такое вообще есть? По моему нет. В этом вопросе каждая СУБД делает как взбредёт в голову. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 09:26 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
MigelleТак все-таки, если отвлечься от типов, пусть будет NUMERIC Как его нормально в строку преобразовать?Показывай свой HEX2INT ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 09:34 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Симонов ДенисНасколько они нормальные это уже другой вопрос.по моему это ключевой вопрос :) смысл в том, что сравнивать разные СУБД - это не очень умно в разрезе конкретной решаемой задачи, стоит использовать возможности того, с чем работаешь. ЗЫ по сабжу я бы вспомнил перевод изи системы в систему и написал бы процедуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 10:54 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
hvladПоказывай свой HEX2INT Да там смотреть нечего особо, я ключевые вещи же показал. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 12:04 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
Migelle, это не компилируется ибо numeric(20) не бывает. Сделай 15 и возвращай его - тебе же число нужно, а не строка ? Зачем тебе там trunc я даже знать не хочу. Если хочется и строку, то не вижу проблем отрезать от неё дробную часть вместе с точкой. PS процедура весьма не эффективна Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 12:38 |
|
Как преобразовать HEX=строку в INT
|
|||
---|---|---|---|
#18+
hvladMigelle,это не компилируется ибо numeric(20) не бывает. Странно, у меня скомпилировалось и работало.... hvladMigelle, Сделай 15 и возвращай его - тебе же число нужно, а не строка ? Если бы число... А мне нужна именно строка. Ну да ладно, всем спасибо, решили другим способом, за пределами firebird. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2015, 15:52 |
|
|
start [/forum/topic.php?fid=40&msg=38995367&tid=1562745]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 263ms |
total: | 408ms |
0 / 0 |