Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MAX на строковое поле.  [new]
kei_tmn
Guest
Добрый день уважаемые пользователи форума!!!
Столкнулся с проблемкой. У нас есть программа, для которой мы разрабатываем плагины. В одном из плагинов требуется автоикрементировать поле, но так как поле не уникальное и строковое приходится через MAX() получать значение и прибавлять 1. Все было нормально, пока не появилось значение большее чем 100... Теперь при попытки получить MAX() выдается 99. как это можно обойти?
31 янв 06, 09:42    [2303658]     Ответить | Цитировать Сообщить модератору
 Re: MAX на строковое поле.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
max(right(('00000000'+'99'), 8))

Вместо 8 и количиства нулей поставить размер поля и столько же нулей.
31 янв 06, 09:45    [2303668]     Ответить | Цитировать Сообщить модератору
 Re: MAX на строковое поле.  [new]
kei_tmn
Guest
tpg
max(right(('00000000'+'99'), 8))

Вместо 8 и количиства нулей поставить размер поля и столько же нулей.


Не могбы ты поконкретнее описать что это?
У нас нули не подставляются, или без разницы?
31 янв 06, 09:48    [2303677]     Ответить | Цитировать Сообщить модератору
 Re: MAX на строковое поле.  [new]
dimka@ultra
Guest
Дело в том, что код 9-ки всегда больше кода 1-цы. Поскольку строки сравниваются по-символьно и С НАЧАЛА строки, то 99 всегда больше 100 ( и даже - 199 :) ).. Макс. ищите с помощью convert()... И добавляйте лидирующие нули.
В конце-концов, выж программеры.

Удачи!
31 янв 06, 09:51    [2303692]     Ответить | Цитировать Сообщить модератору
 Re: MAX на строковое поле.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
kei_tmn
tpg
max(right(('00000000'+'99'), 8))

Вместо 8 и количиства нулей поставить размер поля и столько же нулей.


Не могбы ты поконкретнее описать что это?
У нас нули не подставляются, или без разницы?
Это искуственный прием для определения максимального числового значения строкового представления этого значения. Можно использовать и явное приведение типов, например так

select max(cast(StringKey as int)) from ...

-- StringKey - строковое ключевое поле
31 янв 06, 09:51    [2303694]     Ответить | Цитировать Сообщить модератору
 Re: MAX на строковое поле.  [new]
kei_tmn
Guest
tpg
kei_tmn
tpg
max(right(('00000000'+'99'), 8))

Вместо 8 и количиства нулей поставить размер поля и столько же нулей.


Не могбы ты поконкретнее описать что это?
У нас нули не подставляются, или без разницы?
Это искуственный прием для определения максимального числового значения строкового представления этого значения. Можно использовать и явное приведение типов, например так

select max(cast(StringKey as int)) from ...

-- StringKey - строковое ключевое поле

Спасибо!
31 янв 06, 10:01    [2303736]     Ответить | Цитировать Сообщить модератору
 Re: MAX на строковое поле.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Кстати, учтите, что такое быстро работать не будет. Попробуйте всё же перепроектировать.
31 янв 06, 10:04    [2303750]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить