|
|
|
Конвертация символьной строки в число
|
|||
|---|---|---|---|
|
#18+
Есть поле таблицы Char(10) в основном оно содержит исключительно числовые значения, однако возможно значение типа '101а'. Поле не может принимать значение NULL Мне необходимо найти максимальное значение из числовых представлений по всей таблице. Т.е. взять все первые цифровые символы, перевести их в число и найти среди них максимальное значение. Если бы не было возможно запись символов, то это делается просто: MAX(CONVERT(int,MyField)) Проблема в том, что SQLS7 не переведет строку типа '101а' в число 101, а просто сообщит об ошибке. Можно, конечно написать большой CASE ISNumeric() (всего-то 10 символов), но может есть какой способ попроще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 19:09:38 |
|
||
|
Конвертация символьной строки в число
|
|||
|---|---|---|---|
|
#18+
Можно написать функцию и тогда у тебя будет к примеру так MAX(dbo.MyFunc(MyField)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 19:15:32 |
|
||
|
Конвертация символьной строки в число
|
|||
|---|---|---|---|
|
#18+
Годится ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 19:28:27 |
|
||
|
Конвертация символьной строки в число
|
|||
|---|---|---|---|
|
#18+
Сложность в том, что символы могут быть любыми. Не обязательно буква. Речь идет о номере документа и там может стоять что-то вроде: '101-2г/25' Т.е. надо выделить слева часть строки до первой НЕ цифры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 19:45:38 |
|
||
|
Конвертация символьной строки в число
|
|||
|---|---|---|---|
|
#18+
Ну это же ясно видно Код: plaintext 1. BOL - Transact-SQL Reference - LIKE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 19:55:52 |
|
||
|
Конвертация символьной строки в число
|
|||
|---|---|---|---|
|
#18+
Большое спасибо. Я пока недостаточно хорошо ориентируюсь в BOL, поэтому не знал о возможности задания диапазонов поиска ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 19:59:24 |
|
||
|
Конвертация символьной строки в число
|
|||
|---|---|---|---|
|
#18+
Да я не в упрёк, а так, чтобы запомнилось лучше. Не обижайтесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 22:37:29 |
|
||
|
Конвертация символьной строки в число
|
|||
|---|---|---|---|
|
#18+
Вообще-то говоря, я не понял, зачем переводить всякие там номера документов в INT. Вы ведь не собираетесь складывать номера документов? Пока не поздно, преобразуйте Вашу таблицу примерно таким образом. Doc char(n) -- номер документа DocPrefics char(m) -- префикс документа ============== Это обычная ситуация. По договору N выписаны документы Счет на оплату N-p Счет-фактура N-f Накладная N-i ================== Это, конечно, схема, но подумайте об разделении признаков документов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 23:48:35 |
|
||
|
Конвертация символьной строки в число
|
|||
|---|---|---|---|
|
#18+
Пить надо меньше. Конечно, не префикс, а суффикс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 23:49:49 |
|
||
|
Конвертация символьной строки в число
|
|||
|---|---|---|---|
|
#18+
2 Cat2 Можно, конечно, обсудить постановку задачи. Хотя, забавно, что даже в приведенном Вами предложении Вы пошли по той же схеме. Почему Вы оставили порядковый номер как char(n), хотя логичнее было бы сделать его int? Так вот, приведенную Вами схему я использую в других задачах, правда в более сложном варианте: префикс - chr(n) порядковый номер - int окончание - chr(n) А в той задаче, которую я имел в виду постановка такая: Есть номер документа, который в большинстве случаев является числом, однако иногда (очень редко) в нем могут встречаться и символы. При создании нового документа необходимо предложить новый номер как MAX()+1. Вот и встала проблема конвертации при возможном (но отнюдь не обязательном) наличии символа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2002, 10:40:48 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32037658&tid=1821700]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 409ms |

| 0 / 0 |
