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

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

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

MAX(CONVERT(int,MyField))

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

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

MAX(dbo.MyFunc(MyField))
...
Рейтинг: 0 / 0
Конвертация символьной строки в число
    #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
Конвертация символьной строки в число
    #32037590
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сложность в том, что символы могут быть любыми. Не обязательно буква.

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

'101-2г/25'

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

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


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

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

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

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

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

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

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

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

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


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