Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как узнать:можно ли преобразовать строку в число?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Имеется ASE 12.5.1, таблица X с полем Z типа varchar(255). Вопрос: каким образом можно узнать можно ли преобразовать поле Z в число? То есть - сможет ли convert(float,X.Z) сработать корректно или вызовет ошибку вида "Error: Number (249) Syntax error during explicit conversion of VARCHAR value 'ddd' to a FLOAT field." Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 12:01 |
|
||
|
Как узнать:можно ли преобразовать строку в число?
|
|||
|---|---|---|---|
|
#18+
Явного способа это сделать до сих пор нет. В смысле, нет такой встроенной функции. Но можно сделать что-то типа patindex('%[^1234567890]%', <field_or_var_name> ) = 0 Для float немного по-другому patindex('%[^-.1234567890]%', <field_or_var_name> ) = 0 Ну и все равно результат не до конца гарантирован - может быть строка типа '123.456.789-' или вообще тривиальный выход из диапазона допустимых значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 12:16 |
|
||
|
Как узнать:можно ли преобразовать строку в число?
|
|||
|---|---|---|---|
|
#18+
Очень жаль. Структура базы такова, что в этом поле может находиться не только число, но и строка любого произвольного вида... Но спасибо за ответ :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 12:20 |
|
||
|
Как узнать:можно ли преобразовать строку в число?
|
|||
|---|---|---|---|
|
#18+
В цикле очень просто все можно проанализировать по одному символику. Ну а если в селекте, то можно извратиться так... например для целых чисел: case char_length(<field_or_var_name>) when 1 then patindex('[0-9]', <field_or_var_name> ) <> 0 then convert(.... when 2 then patindex('[0-9][0-9]', <field_or_var_name> ) <> 0 then convert(.... when 3 then patindex('[0-9][0-9][0-9]', <field_or_var_name> ) <> 0 then convert(.... ... when 18 then patindex('[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]', <field_or_var_name> ) <> 0 then convert(.... else 0 end Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 14:44 |
|
||
|
Как узнать:можно ли преобразовать строку в число?
|
|||
|---|---|---|---|
|
#18+
:-) забыл вторые case-ы повставлять перед patindex-ами. Но суть, понятна, я полагаю Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 14:46 |
|
||
|
Как узнать:можно ли преобразовать строку в число?
|
|||
|---|---|---|---|
|
#18+
passlightОчень жаль. Структура базы такова, что в этом поле может находиться не только число, но и строка любого произвольного вида... Но спасибо за ответ :-) Это плохо, что такая структура. Переделывай :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 10:56 |
|
||
|
Как узнать:можно ли преобразовать строку в число?
|
|||
|---|---|---|---|
|
#18+
Числовое представление строки нужно для сортировок и выборок? Если, да, то проще завести 2-е поле типа NUMERIC и заносить туда числовое представление строки с помощью триггера, или если логика слишком сложная, то спомощью клиентского приложения. Такой подход позволит правильно отсортировать такую последовательность: строка число 1 1 10 10 11 11 11а 11 11б 11 12 12 select строка from t order by число,строка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 13:58 |
|
||
|
Как узнать:можно ли преобразовать строку в число?
|
|||
|---|---|---|---|
|
#18+
MasterZiv passlightОчень жаль. Структура базы такова, что в этом поле может находиться не только число, но и строка любого произвольного вида... Но спасибо за ответ :-) Это плохо, что такая структура. Переделывай :-)) Сам знаю, что плохо :-). Стремлюсь, но пока имеем то, что имеем... :-(. Всего сразу не переделаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 15:41 |
|
||
|
Как узнать:можно ли преобразовать строку в число?
|
|||
|---|---|---|---|
|
#18+
Я хочу предостеречь от опасности - нужно пытаться преобразовывать только если оно преобразуется. Иначе convert() просто аварийно завершает серверный процесс (соединение слава богу остается). Т.е. ваш код обработки ошибки на TSQL даже не будет пытаться выполниться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:46 |
|
||
|
Как узнать:можно ли преобразовать строку в число?
|
|||
|---|---|---|---|
|
#18+
MasterZivЯ хочу предостеречь от опасности - нужно пытаться преобразовывать только если оно преобразуется. Иначе convert() просто аварийно завершает серверный процесс (соединение слава богу остается). Т.е. ваш код обработки ошибки на TSQL даже не будет пытаться выполниться. Спасибо за предостережение. Я уже понял, что если не получится преобразовать, то ошибку обработать не удается. Сочинил с вашей помощью что-то вроде этого: Код: plaintext 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. 45. 46. Придется курсором пробежаться по данным и подсовывать их этой ХП. Может быть можно оптимальнее? Спасибо! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 12:24 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32941575&tid=2013826]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
199ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 269ms |
| total: | 576ms |

| 0 / 0 |
