Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?
18 апр 12, 10:53    [12431541]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
aleks2
Guest
select LEFT('3.1.10', 3), '3.1.10'
18 апр 12, 10:56    [12431561]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Написать соответствующую разбиралку. Например, с использованием String functions. Или почитать про Массивы и списки.
18 апр 12, 10:57    [12431568]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
Гавриленко Сергей Алексеевич
Написать соответствующую разбиралку. Например, с использованием String functions. Или почитать про Массивы и списки.

пример разбиралки..........
18 апр 12, 11:00    [12431589]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
Гузы
Guest
aleks2,
select LEFT('3.1.10', 3)+'3.1.10'

Нельзя же такие ошибки делать, а то неровен час... :))
18 апр 12, 11:00    [12431597]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
МИхаил__________________
Гавриленко Сергей Алексеевич
Написать соответствующую разбиралку. Например, с использованием String functions. Или почитать про Массивы и списки.

пример разбиралки..........
Ну ссылки потыкайте, что ли.
18 апр 12, 11:01    [12431601]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
Гузы
aleks2,
select LEFT('3.1.10', 3)+'3.1.10'

Нельзя же такие ошибки делать, а то неровен час... :))


это конечно хорошо , но у меня таблица таких строк
2.1.1.1
3.1.1.2
3.1.10.1
18 апр 12, 11:11    [12431661]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
хочу определить позицию второй точки
declare @t table (код char(10))

insert into @t values ('3.1.1.2.')
insert into @t values ('3.1.1.2.')
insert into @t values ('3.1.10.2.')
insert into @t values ('3.1.11.2.')

SELECT код,
CHARINDEX('.',код,CHARINDEX('.',Код,1))
FROM @t
получается 2..........
18 апр 12, 11:18    [12431731]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
CHARINDEX('.',код,CHARINDEX('.',Код,1) + 1)
18 апр 12, 11:20    [12431758]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
вроде получилось

declare @t table (код char(10))

insert into @t values ('3.1.1.2.')
insert into @t values ('3.1.1.2.')
insert into @t values ('3.1.10.2.')
insert into @t values ('3.1.11.2.')

SELECT код,
SUBSTRING(код,1,CHARINDEX('.',код,2)),
SUBSTRING(код,1,CHARINDEX('.',код,CHARINDEX('.',Код,1) + 1)),
SUBSTRING(код,1,CHARINDEX('.',код,CHARINDEX('.',код,CHARINDEX('.',Код,1) + 1)+1))
FROM @t
18 апр 12, 11:30    [12431889]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
aleks2
Guest
Гузы
aleks2,
select LEFT('3.1.10', 3)+'3.1.10'

Нельзя же такие ошибки делать, а то неровен час... :))

Хде ты там ошибку узрел?


Пример разбиралки.
CREATE function [dbo].[f_StrToTableEx](@str varchar(8000), @delimiter varchar(64)=',')
returns table as
return(
WITH str_nums ( n1, n2, Number ) 
AS 
( 
select  1-LEN(@delimiter) as n1, charindex(@delimiter, @str+@delimiter) as n2, 0 as Number  
UNION ALL 
select n2 as n1, charindex(@delimiter, @str+@delimiter, n2+LEN(@delimiter)) as n2, Number+1 as Number
from str_nums
WHERE n2<len(@str)
) 
SELECT SUBSTRING(@str, n1+LEN(@delimiter), n2-n1-1) as Value, Number, n1+1 as StartPosition FROM str_nums

) 


ЗЫ. Нибось ишо собералку нада?
18 апр 12, 11:32    [12431913]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
МИхаил__________________
Гавриленко Сергей Алексеевич
Написать соответствующую разбиралку. Например, с использованием String functions. Или почитать про Массивы и списки.

пример разбиралки..........


Вот разбиралка, которая возвращает конкретное значение по порядковому номеру и разделителю
CREATE FUNCTION [dbo].[fn_Split_String]
(
	@RowData varchar(8000),
	@SplitOn varchar(5),
	@ID int
)  
RETURNS varchar(8000)
AS  
BEGIN 
	Declare @Cnt int, @substr varchar(8000)
	Set @Cnt = 1

	While (Charindex(@SplitOn,@RowData)>0)
	Begin
		set @substr = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
		IF @ID = @Cnt
			Return @substr
		Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
		Set @Cnt = @Cnt + 1
	End	
	Return @RowData
END
18 апр 12, 13:44    [12432829]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4769
МИхаил__________________
Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?


--переводила в строку для сортировки в формате(делила по split, добавляла 1000)

1003.1001.1010.1002

--максимальная подстрока была 128, так что 999 достаточно
18 апр 12, 13:56    [12432874]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
AxuliON
Вот разбиралка ...
While
Substring
CharIndex
FacePalm.jpg
Есчё адын. Императивист.
И это после поста aleks2
AxuliON, в старике ни микрой ни макрой не возьмёте.
CharIndex имеет 3 параметра.

В копилуку "ненормальное программирование".
DECLARE	 @Str	SysName	= '3.1.10.2'
	,@Anc	Int	= 2

SELECT Replace(SubString(X.Res,2,Len(X.Res)-2),'/','.') FROM (
SELECT HierarchyID::Parse('/' + Replace(@Str,'.','/') + '/').GetAncestor(@Anc).ToString())X(Res)
19 апр 12, 10:00    [12437334]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
Mnior
AxuliON
Вот разбиралка ...
While
Substring
CharIndex
FacePalm.jpg
Есчё адын. Императивист.
И это после поста aleks2
AxuliON, в старике ни микрой ни макрой не возьмёте.
CharIndex имеет 3 параметра.

В копилуку "ненормальное программирование".


Мне не нужна была на возврате таблица.
Тупо нужно было выдернуть Ф И О из строки по отдельности.
Не нравится - не пользуйтесь.
Идеалисты хреновы.
19 апр 12, 12:51    [12438526]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
iljy
Member

Откуда:
Сообщений: 8711
AxuliON,

от говнокодера слышим
19 апр 12, 13:02    [12438608]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
AxuliON
Мне не нужна была на возврате таблица.
Тупо нужно было выдернуть Ф И О из строки по отдельности.
И? Это повод писать коряво?
AxuliON
Не нравится - не пользуйтесь.
Ненада вбрасывать говна в вентилятор плохой код на форумы.
AxuliON
Идеалисты хреновы.
Притом сознательно. Если жизненое кредо быть бомжом говнокодером пофигистом (человек без какого либо критического отношениею к своей деятельности), то не надо лезть в чужой монастырь со своим уставом на проффесиональный узкоспециализированный форум.
Для этого есть отдельные сайты, к примеру.

Если было хоть чуть самокритики, то поинтересовались бы, что конкретно ненраица в коде.

КО

PS: Не принимайте близко к сердцу. Мой пример с HierarchyID то не лучше. "ненормальное программирование" относится к нему ведь.
19 апр 12, 15:37    [12440259]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Ну раз здесь праздник ненормального программирования, то стоит тогда упомянуть и:
SELECT PARSENAME('3.1.10.2',4)

только PARSENAME слегка ограничена, но для конкурса пойдет.
19 апр 12, 15:57    [12440433]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
а можно и мне поучаствовать в конкурсе
declare @c varchar(100) = '3.1.10.2'
declare @x hierarchyid 

set @x = xast('/' + replace(@c, '.', '/') + '/' as hierarchyid)
select @x.GetAncestor(НужныйУровень).ToString()


ЗЫЖ надеюсь не будете сильно пинать
20 апр 12, 09:10    [12443452]     Ответить | Цитировать Сообщить модератору
 Re: Как разобрать строку 3.1.10.2. на 3.1,3.1.10 в sql запросе ?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
HandKot, опоздали :)
12437334
20 апр 12, 15:18    [12446412]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить