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

Откуда:
Сообщений: 37
В столбце (varchar) имеются данные, которые хранятся в таком виде:
"10а", "45б", "101/4", "110"

Требуется отделить литеры от цифр(также разделить данные по наклонной черте) и результат вывести в два столбца(цифры в один, литеры в другой, также и с дробями, целую часть в один столбец, дробную во второй)

Использование функций CHARINDEX("/", ..., ...) и SUBSTRING(len(), len()-1, ...), - запрос получается громоздким и медленным, подскажите альтернативные варианты :)
13 фев 08, 14:49    [5284390]     Ответить | Цитировать Сообщить модератору
 Re: Разделение данных в MSSQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
inSAne_GHoST

Использование функций CHARINDEX("/", ..., ...) и SUBSTRING(len(), len()-1, ...), - запрос получается громоздким и медленным, подскажите альтернативные варианты :)

Проверять и парсить данные на клиенте
13 фев 08, 14:51    [5284426]     Ответить | Цитировать Сообщить модератору
 Re: Разделение данных в MSSQL  [new]
inSAne_GHoST
Member

Откуда:
Сообщений: 37
Glory
Проверять и парсить данные на клиенте


Клиента не существует, а обработку данных выполняет хранимая процедура...

требуется выполнить эту задачу средствами mssql
13 фев 08, 15:01    [5284528]     Ответить | Цитировать Сообщить модератору
 Re: Разделение данных в MSSQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
inSAne_GHoST
Glory
Проверять и парсить данные на клиенте


Клиента не существует, а обработку данных выполняет хранимая процедура...

требуется выполнить эту задачу средствами mssql

Ну тогда ничего, кроме функций CHARINDEX, SUBSTRING и тд у сервера нет
13 фев 08, 15:03    [5284545]     Ответить | Цитировать Сообщить модератору
 Re: Разделение данных в MSSQL  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
DECLARE @S VARCHAR(100);
SET @S='ABCDEF12345';
SELECT STUFF(@S,1, PATINDEX('%[0-9]%',@S)-1,'');

-Автор сего iap, а дальше вам придется немного подумать и доработать напильником...
13 фев 08, 15:09    [5284600]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Разделение данных в MSSQL  [new]
ahmae
Member

Откуда:
Сообщений: 35
Смотрите форумчане
а если будет SET @S='12345ABCDEF';(т.е. сначала цифры, а потом уже буквы), то уже не работает
если какая-нить универсальная чтобы без разницы сначала цифры или в конце, но отделяла цифры?
19 сен 11, 21:42    [11301704]     Ответить | Цитировать Сообщить модератору
 Re: Разделение данных в MSSQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ну так SUBSTRING, с которой и началась данная тема
19 сен 11, 22:20    [11301805]     Ответить | Цитировать Сообщить модератору
 Re: Разделение данных в MSSQL  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
SET NOCOUNT ON;
DECLARE @S VARCHAR(100)='12gf3k45A8BCDE F0';
SELECT
(
 SELECT SUBSTRING(@S,number,1)
 FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)LIKE'[0-9]'
 ORDER BY number
 FOR XML PATH('')
) Numbers,
(
 SELECT SUBSTRING(@S,number,1)
 FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)NOT LIKE'[0-9]'
 ORDER BY number
 FOR XML PATH(''),TYPE
).value('text()[1]','VARCHAR(100)') Characters;
20 сен 11, 09:37    [11302713]     Ответить | Цитировать Сообщить модератору
 Re: Разделение данных в MSSQL  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5122
как вариант регулярные выражения
в данном случае это "из пушки по...", но иногда может и пригодиться.
20 сен 11, 10:02    [11302918]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить