Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Аналог substring для чисел  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 68483
Собственно, сабж.
Есть такая функция?
Как вариант можно преобразовать в текст, а потом вычленять нужную позицию.
Есть ли другие варианты?

З.Ы. МС СКЛ 2008
17 янв 14, 18:56    [15431816]     Ответить | Цитировать Сообщить модератору
 Re: Аналог substring для чисел  [new]
pio777
Member

Откуда:
Сообщений: 127
Прогер_самоучка,

declare @a int = 13
SELECT @a/10, @a%10
17 янв 14, 19:02    [15431833]     Ответить | Цитировать Сообщить модератору
 Re: Аналог substring для чисел  [new]
sdet
Member

Откуда:
Сообщений: 463
Прогер_самоучка,

right,left (если крайние)
17 янв 14, 19:14    [15431880]     Ответить | Цитировать Сообщить модератору
 Re: Аналог substring для чисел  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
sdet плохой выбор интерпретации вопроса ТС.
Если ему надо было спец-функцию которая есть результатом двух (преобразовать в текст, вычленить позицию), то это глупость. Зачем скрывать что-то? Пусть будет так прямо и написано (SubString(Convert(VarChar,@Int),3,1)). А то это превращается в "дезориентацию противника" (как эти Left/Right).
pio777 лучше "угадал" смысл. Точнее выбрал более осмысленный вариант (независимо от реальности).
Но imxo лучше оформить так:
DECLARE	@I Int = 12345
SELECT	@I/10000%10
,	@I/1000%10
,	@I/100%10
,	@I/10%10
,	@I/1%10


Но меня удивляет сам вопрос. Что за задачу имеет ТС, что при этом он задался этим вопросом, при этом не понимая сути окружения.
Это как самому попасть в закрытую комнату не имея от неё ключа, и просить помощи выйти от туда.

Поэтому вопрос: Зачем это нужно - вычленять десятичное значение позиции?
Если это работа со строками - почему хранится в Int типе?, если нужно получить Цифру - то почему десятичную?

Вы хотите рассчитать контрольную цифру?
Думаю стоит посмотреть уже готовые реализации. Количество алгоритмов очень мало и многие идентичны, но просто для разных длин.
И это, надеюсь вы не гонитесь за реализацией самого оптимального варианта? А то это принесёт 0 реального профита и оно разобъётся об непонимание совсем других вещей (не использовать скалярки и TSQL).
Тем более требовать это от скуля бессмысленно.
Лучше пишите так, чтобы это было легко и надёжно использовать.

Ссори за излишнюю докучаемость.
18 янв 14, 02:57    [15432913]     Ответить | Цитировать Сообщить модератору
 Re: Аналог substring для чисел  [new]
sdet
Member

Откуда:
Сообщений: 463
Mnior,
right,left давались как один из вариантов без convert
declare @a int = 13
SELECT right(@a,1)
SELECT @a%10
18 янв 14, 12:19    [15433329]     Ответить | Цитировать Сообщить модератору
 Re: Аналог substring для чисел  [new]
implicit convert
Guest
sdet
Mnior,
right,left давались как один из вариантов без convert
declare @a int = 13
SELECT right(@a,1)
SELECT @a%10

во-первых, конверт будет, просто неявный (см. план запроса)
во-вторых, как следствие первого, на выходи будет varchar/nvarchar
18 янв 14, 13:35    [15433409]     Ответить | Цитировать Сообщить модератору
 Re: Аналог substring для чисел  [new]
sdet
Member

Откуда:
Сообщений: 463
implicit convert
sdet
Mnior,
right,left давались как один из вариантов без convert
declare @a int = 13
SELECT right(@a,1)
SELECT @a%10

во-первых, конверт будет, просто неявный (см. план запроса)
во-вторых, как следствие первого, на выходи будет varchar/nvarchar

Да понятно что неявно будет.
Но в целом согласен, что не самый оптимальный вариант
18 янв 14, 13:59    [15433433]     Ответить | Цитировать Сообщить модератору
 Re: Аналог substring для чисел  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
sdet
Да понятно что неявно будет.
А это очень важный фактор.

Но даже если не ставить важность: Смысл приводить сюда альтернативный вариант? Просто потому что можно придумать?! - Не имеет смысла. У него должно быть хотя бы одно преимущество.
Притом не такое "Ну какое-то преимущество ведь можно придумать".

PS: Злободневно.
PPS: sdet - всё нормально. Хотя бы за участие спасибо.
18 янв 14, 14:24    [15433483]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить