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

Есть таблица T в ней много столбцов , но нас интересует только 1 столбец. Нужно сделать в нем преобразование типов
Столбец 1
Характеристика (количество планок(шт) оперативной памяти в комплекте). Здесь в одном комплекте может быть от 1 до 8 планок
m
1x
2x
4x
8x
16x
Значения 1x , 2x и тд - тапа varchar
Необходимо найти максимальное значение по этому столбцу и вывести его в формате 1x , 2x - но уже числовом ( smallint например)
Размышления мои над этим вопросом идут уже долго поэтому обращаюсь к вам. Похожий вопрос ранее уже задавался мной , но решение только частичное. Кто уже видел похожий пост - просьба не раздражаться.
Итак мы пришли к тому
что надо
SELECT cast(max(LEFT(m, CHARINDEX('x', m) -1))as int) from T as m. Использовали charindex так как точно не знаем сколько нам до символа x
В данной ситуации мы имеем просто числа без x. Как туда прицепить x ? Я пробовал и канкатенацией и просто комбинировал - не получилось(
27 авг 11, 12:39    [11189167]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
ned help
Guest
И саме главное...
Численным должно быть только число , а x можно оставить символьным, так как сравниваться будут числа в численном формате.
27 авг 11, 12:51    [11189186]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
Glory
Member

Откуда:
Сообщений: 104751
ned help
Как туда прицепить x ? Я пробовал и канкатенацией и просто комбинировал - не получилось(

Конкатенацией чего?
cast(... as int) + 'x' - это ни разу не конкатенация. Потому что левый агрумент является числом, а не строкой
27 авг 11, 13:02    [11189214]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
ned help
Guest
Glory, Дык вот. А надо их как - то сделать вместе. Не канкатинация конечно - но как тогда. ?
27 авг 11, 13:08    [11189233]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
ned help
Guest
Glory, А зделать из x число тоже не очень получается
27 авг 11, 13:09    [11189235]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
Glory
Member

Откуда:
Сообщений: 104751
ned help
Glory, А зделать из x число тоже не очень получается

А из числа строку что мешает сделать ?
27 авг 11, 13:12    [11189240]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
салта
Guest
ned help
Glory, А зделать из x число тоже не очень получается

можно только из числа сделать текст!
так что в вашем случае что-то типа cast(числовая_переменная as char(2))

в что ли в таблице нужно хранить в одном поле и число и символ? присоединяйте символ потом, когда нужен... в отчете...
27 авг 11, 13:14    [11189242]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
Glory
Member

Откуда:
Сообщений: 104751
И вообще все проще делается
SELECT TOP 1 * 
from T as m
ORDER BY RIGHT('0000000000'+m, 10) DESC


Сообщение было отредактировано: 27 авг 11, 13:14
27 авг 11, 13:14    [11189243]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
ned help
Guest
Glory,Мешает то что если я буду сравнивать два числа в формате строк меньшее из них окажется больше большего. Попробуйте сами. А мне нужно максимальное там искать
Вот они в числе select cast(('2') as int) a union select CAST(( '4') as int) order by a desc
Вот они в тексте select '2' a union select '4' order by a desc
27 авг 11, 13:15    [11189248]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
Glory
Member

Откуда:
Сообщений: 104751
ned help
Glory,Мешает то что если я буду сравнивать два числа в формате строк меньшее из них окажется больше большего. Попробуйте сами. А мне нужно максимальное там искать
Вот они в числе select cast(('2') as int) a union select CAST(( '4') as int) order by a desc
Вот они в тексте select '2' a union select '4' order by a desc

А я разве предлагал сравнивать ?
Вы путаете последовательность ваших действий - в этом и проблема
27 авг 11, 13:16    [11189254]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
ned help
Guest
Glory,

А как это сюда приделать SELECT cast(max(LEFT(m, CHARINDEX('x', m) -1))as int) from T as m.
Последовательность такая.
Было текст текст - это не правильный формат для ответа. Должен быть формат в ответе число - текст либо число число(если возм)
Отсоединили первый текст - сделали из него число посчитали агр показатели
При этом из второго текста число упорно не делается
При этом канкатенация не возможна так как не два текста
Где ошибка тогда
27 авг 11, 13:38    [11189311]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
aleks2
Guest
ned help
Добрый день. Есть такая задача.
1x


1. Стисняюсь спросить... В чем сакральный смысл "x"? Что мешает выкинуть "x" и использовать числовой формат столбца?

2. Бред
cast(max(LEFT(m, CHARINDEX('x', m) -1))as int)
ни проще ли заменить
cast(REPLACE(m, 'x', '') as int)
?
27 авг 11, 14:14    [11189421]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
ned help
Guest
(SELECT cast(cast(max(LEFT(value, CHARINDEX('x', value) -1))as int)as varchar)+ 'x' from T) as value


Кстати до этого я тоже додумался
27 авг 11, 14:15    [11189424]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
ned help
Guest
aleks2,

replace это хорошо. Спасибо - думал об этом. Ничего не мешет. Просто там где x там вся таблица менделева и хочу получать ответ в формате
1x x - такая то оперативка
2y y - такая то и тд
5z - 5 шт в комплекте оперативки типа z
27 авг 11, 14:21    [11189438]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
ned help
Guest
Всем спасибо - тема закрыта. Я кажется нашел решение
27 авг 11, 14:23    [11189447]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
aleks2
Guest
ned help
aleks2,

Просто там где x там вся таблица менделева и хочу получать ответ в формате
1x x - такая то оперативка
2y y - такая то и тд
5z - 5 шт в комплекте оперативки типа z


Почитайте, чтоль, теорию реляционных баз данны - про НОРМАЛИЗАЦИЮ. Хоть поймете, зачем в таблице БОЛЬШЕ ЧЕМ ОДНА колонка.
27 авг 11, 14:25    [11189452]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
ned help
Guest
aleks2,

не я проектировал)
27 авг 11, 14:45    [11189520]     Ответить | Цитировать Сообщить модератору
 Re: Хитрая задача по преобразованию типов  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
aleks2, это задачи sql-ex. Процесс обучения идет видимо тяжело))).
27 авг 11, 15:52    [11189728]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить