Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Конвертация символьной строки в число / 10 сообщений из 10, страница 1 из 1
18.07.2002, 19:09:38
    #32037574
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация символьной строки в число
Есть поле таблицы Char(10) в основном оно содержит исключительно числовые значения, однако возможно значение типа '101а'. Поле не может принимать значение NULL

Мне необходимо найти максимальное значение из числовых представлений по всей таблице. Т.е. взять все первые цифровые символы, перевести их в число и найти среди них максимальное значение.

Если бы не было возможно запись символов, то это делается просто:

MAX(CONVERT(int,MyField))

Проблема в том, что SQLS7 не переведет строку типа '101а' в число 101, а просто сообщит об ошибке.

Можно, конечно написать большой CASE ISNumeric() (всего-то 10 символов), но может есть какой способ попроще?
...
Рейтинг: 0 / 0
18.07.2002, 19:15:32
    #32037577
Dolphin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация символьной строки в число
Можно написать функцию и тогда у тебя будет к примеру так

MAX(dbo.MyFunc(MyField))
...
Рейтинг: 0 / 0
18.07.2002, 19:28:27
    #32037579
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация символьной строки в число
Годится ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table #t(f1 char( 10 ))
insert #t values('101a')
insert #t values('101')
insert #t values('a101')
insert #t values('a')
insert #t values('')
insert #t values(NULL)

select cast(left(f1, patindex('%[a-z]%', f1+'a')- 1 ) as int) from #t
drop table #t
...
Рейтинг: 0 / 0
18.07.2002, 19:45:38
    #32037590
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация символьной строки в число
Сложность в том, что символы могут быть любыми. Не обязательно буква.

Речь идет о номере документа и там может стоять что-то вроде:

'101-2г/25'

Т.е. надо выделить слева часть строки до первой НЕ цифры.
...
Рейтинг: 0 / 0
18.07.2002, 19:55:52
    #32037595
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация символьной строки в число
Ну это же ясно видно

Код: plaintext
1.
select cast(left(f1, patindex('%[^1234567890]%', f1+'a')- 1 ) as int) from #t


BOL - Transact-SQL Reference - LIKE
...
Рейтинг: 0 / 0
18.07.2002, 19:59:24
    #32037597
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация символьной строки в число
Большое спасибо.

Я пока недостаточно хорошо ориентируюсь в BOL, поэтому не знал о возможности задания диапазонов поиска
...
Рейтинг: 0 / 0
18.07.2002, 22:37:29
    #32037620
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация символьной строки в число
Да я не в упрёк, а так, чтобы запомнилось лучше. Не обижайтесь
...
Рейтинг: 0 / 0
18.07.2002, 23:48:35
    #32037627
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация символьной строки в число
Вообще-то говоря, я не понял, зачем переводить всякие там номера документов в INT.
Вы ведь не собираетесь складывать номера документов?

Пока не поздно, преобразуйте Вашу таблицу примерно таким образом.
Doc char(n) -- номер документа
DocPrefics char(m) -- префикс документа
==============
Это обычная ситуация.

По договору N выписаны документы
Счет на оплату N-p
Счет-фактура N-f
Накладная N-i
==================
Это, конечно, схема, но подумайте об разделении признаков документов.
...
Рейтинг: 0 / 0
18.07.2002, 23:49:49
    #32037628
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация символьной строки в число
Пить надо меньше.
Конечно, не префикс, а суффикс.
...
Рейтинг: 0 / 0
19.07.2002, 10:40:48
    #32037658
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация символьной строки в число
2 Cat2

Можно, конечно, обсудить постановку задачи. Хотя, забавно, что даже в приведенном Вами предложении Вы пошли по той же схеме. Почему Вы оставили порядковый номер как char(n), хотя логичнее было бы сделать его int?

Так вот, приведенную Вами схему я использую в других задачах, правда в более сложном варианте:
префикс - chr(n)
порядковый номер - int
окончание - chr(n)

А в той задаче, которую я имел в виду постановка такая:

Есть номер документа, который в большинстве случаев является числом, однако иногда (очень редко) в нем могут встречаться и символы.

При создании нового документа необходимо предложить новый номер как MAX()+1. Вот и встала проблема конвертации при возможном (но отнюдь не обязательном) наличии символа
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Конвертация символьной строки в число / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]