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

Откуда: Москва
Сообщений: 215
DECLARE @S VARCHAR(100);
SET @S='ertt,ertert,trtqe,werwete,terte,rtert,fffs'

 SELECT number
 FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)=','

Хороший кусок кода. Возвращает таблицу с позициями "," в строке

Блин, но в нем не хватает айдишника...
14 июл 09, 08:14    [7411465]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Ох...ий программизд
Guest
Azvaal,

SELECT identity(int, 1,1) as id, number
into #t
FROM master.dbo.spt_values
WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)=','

select * from #t
14 июл 09, 08:20    [7411475]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Azvaal
Member

Откуда: Москва
Сообщений: 215
Ох...ий программизд,

Работает :) А не могли бы вы обьяснить, что эт за айдентити такое?
14 июл 09, 08:23    [7411484]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Ох...ий программизд
Guest
Azvaal,

вариант 2

 SELECT row_number() over(order by number) as id, number
  FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)=','
14 июл 09, 08:24    [7411487]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Azvaal
Member

Откуда: Москва
Сообщений: 215
select @@version

Microsoft SQL Server 2000 - 8.00.2055 (Intel X86) Dec 16 2008 19:46:53 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
14 июл 09, 08:25    [7411489]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Ох...ий программизд
Guest
Azvaal
Microsoft SQL Server 2000

Вариант 2 отменяецца
14 июл 09, 08:26    [7411491]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Ох...ий программизд
Guest
Azvaal
Ох...ий программизд,

Работает :) А не могли бы вы обьяснить, что эт за айдентити такое?


IDENTITY (Function)
14 июл 09, 08:29    [7411497]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SQL2000
DECLARE @S VARCHAR(100);
SET @S='ertt,ertert,trtqe,werwete,terte,rtert,fffs'
SELECT
 (
  SELECT COUNT(*)
  FROM master.dbo.spt_values vv
  WHERE vv.type='P' AND vv.number<=v.number AND SUBSTRING(@S,vv.number,1)=','
 ) id,
 number
FROM master.dbo.spt_values v
WHERE v.type='P' AND v.number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,v.number,1)=','
14 июл 09, 09:02    [7411551]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Azvaal
Member

Откуда: Москва
Сообщений: 215
iap
SQL2000
DECLARE @S VARCHAR(100);
SET @S='ertt,ertert,trtqe,werwete,terte,rtert,fffs'
SELECT
 (
  SELECT COUNT(*)
  FROM master.dbo.spt_values vv
  WHERE vv.type='P' AND vv.number<=v.number AND SUBSTRING(@S,vv.number,1)=','
 ) id,
 number
FROM master.dbo.spt_values v
WHERE v.type='P' AND v.number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,v.number,1)=','


Ну вы и извращенец :)

з.ы.
это комплимент умному человеку ;)
14 июл 09, 09:23    [7411601]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
step_ks
Member

Откуда:
Сообщений: 936
DECLARE @S VARCHAR(100);
SET @S='ertt,ertert,trtqe,werwete,terte,rtert,fffs'

 SELECT number,
        id=datalength(left(@S,number))-datalength(replace(left(@S,number),',',''))
 FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)=',' 
 
14 июл 09, 10:04    [7411785]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
DECLARE @S VARCHAR(2047);
SET @S=',dsds,fdffd,fdsewe,ewew,hghg,weew,ewew,wew,dsds,weqwq,'

 SELECT ROW_NUMBER() OVER (ORDER BY [number]) AS id, number
 INTO #tmp
 FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)=','
 
 CREATE CLUSTERED INDEX IX ON [#tmp](id)
 
 SELECT
	t1.[number],
	(SELECT TOP 1 [number] FROM [#tmp] t2 WHERE t2.id > t1.id),
	SUBSTRING(@S, t1.[number] + 1,
		(SELECT TOP 1 [number] FROM [#tmp] t2 WHERE t2.id > t1.id) - t1.[number] - 1
	)
 FROM [#tmp] t1
 WHERE t1.[id] < (SELECT MAX([id]) FROM [#tmp])
 
 
 DROP TABLE [#tmp]
14 июл 09, 10:31    [7411946]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Ох...ий программизд
Guest
Senya_L
DECLARE @S VARCHAR(2047);
SET @S=',dsds,fdffd,fdsewe,ewew,hghg,weew,ewew,wew,dsds,weqwq,'

 SELECT ROW_NUMBER() OVER (ORDER BY [number]) AS id, number
 INTO #tmp
 FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)=','
 
 CREATE CLUSTERED INDEX IX ON [#tmp](id)
 
 SELECT
	t1.[number],
	(SELECT TOP 1 [number] FROM [#tmp] t2 WHERE t2.id > t1.id),
	SUBSTRING(@S, t1.[number] + 1,
		(SELECT TOP 1 [number] FROM [#tmp] t2 WHERE t2.id > t1.id) - t1.[number] - 1
	)
 FROM [#tmp] t1
 WHERE t1.[id] < (SELECT MAX([id]) FROM [#tmp])
 
 
 DROP TABLE [#tmp]


Microsoft SQL Server 2000
14 июл 09, 10:36    [7411986]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Ох...ий программизд
Microsoft SQL Server 2000
Я знаю. Мне для себя интересно было. :) А вот запрос iap прикрутить сюда совсем несложно. Если Вы так настаиваете...
DECLARE @S VARCHAR(100);
SET @S='ertt,ertert,trtqe,werwete,terte,rtert,fffs'
SELECT
 (
  SELECT COUNT(*)
  FROM master.dbo.spt_values vv
  WHERE vv.type='P' AND vv.number<=v.number AND SUBSTRING(@S,vv.number,1)=','
 ) id,
 number
INTO [#tmp]
FROM master.dbo.spt_values v
WHERE v.type='P' AND v.number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,v.number,1)=',' 
 CREATE CLUSTERED INDEX IX ON [#tmp](id)
 
 SELECT
	t1.[number],
	(SELECT TOP 1 [number] FROM [#tmp] t2 WHERE t2.id > t1.id),
	SUBSTRING(@S, t1.[number] + 1,
		(SELECT TOP 1 [number] FROM [#tmp] t2 WHERE t2.id > t1.id) - t1.[number] - 1
	)
 FROM [#tmp] t1
 WHERE t1.[id] < (SELECT MAX([id]) FROM [#tmp])
 
 
 DROP TABLE [#tmp]
14 июл 09, 10:51    [7412102]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Ох...ий программизд
Guest
Senya_L
DECLARE @S VARCHAR(100);
SET @S='ertt,ertert,trtqe,werwete,terte,rtert,fffs'
SELECT
(
SELECT COUNT(*)
FROM master.dbo.spt_values vv
WHERE vv.type='P' AND vv.number<=v.number AND SUBSTRING(@S,vv.number,1)=','
) id,
number
INTO [#tmp]
FROM master.dbo.spt_values v
WHERE v.type='P' AND v.number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,v.number,1)=','
CREATE CLUSTERED INDEX IX ON [#tmp](id)

SELECT
t1.[number],
(SELECT TOP 1 [number] FROM [#tmp] t2 WHERE t2.id > t1.id),
SUBSTRING(@S, t1.[number] + 1,
(SELECT TOP 1 [number] FROM [#tmp] t2 WHERE t2.id > t1.id) - t1.[number] - 1
)
FROM [#tmp] t1
WHERE t1.[id] < (SELECT MAX([id]) FROM [#tmp])


DROP TABLE [#tmp]


Да вы, батенька, аццкий извращенец
14 июл 09, 10:55    [7412143]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Ох...ий программизд
Senya_L
DECLARE @S VARCHAR(100);
SET @S='ertt,ertert,trtqe,werwete,terte,rtert,fffs'
...........


Да вы, батенька, аццкий извращенец
Я только учусь. У [iap].

Кстати, небольшая ошибочка. Строка должна начинаться и заканчиваться запятой
SET @S=',ertt,ertert,trtqe,werwete,terte,rtert,fffs,'
14 июл 09, 10:58    [7412168]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
step_ks
DECLARE @S VARCHAR(100);
SET @S='ertt,ertert,trtqe,werwete,terte,rtert,fffs'

 SELECT number,
        id=datalength(left(@S,number))-datalength(replace(left(@S,number),',',''))
 FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)=',' 
 
Если у нас тут конкурс извращенцев, то могу предложить усовершенствование на случай юникода
DECLARE @S NVARCHAR(100);
SET @S=N'ertt,ertert,trtqe,werwete,terte,rtert,fffs'

 SELECT number,
        id=(datalength(left(@S,number))-datalength(replace(left(@S,number),',','')))/DATALENGTH(LEFT(' '+@S,1))
 FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)=','
14 июл 09, 11:16    [7412264]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
Azvaal
Member

Откуда: Москва
Сообщений: 215
Не правильно я тему назвал ))
14 июл 09, 11:28    [7412330]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
nApoBo3
Member

Откуда:
Сообщений: 72
Можно еще так

DECLARE @S NVARCHAR(100);
SET @S=N'ertt,ertert,trtqe,werwete,terte,rtert,fffs'

 SELECT number,
        id=newid()
 FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)=','
14 июл 09, 14:10    [7413466]     Ответить | Цитировать Сообщить модератору
 Re: Да что со мной такое...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
nApoBo3
Можно еще так

DECLARE @S NVARCHAR(100);
SET @S=N'ertt,ertert,trtqe,werwete,terte,rtert,fffs'

 SELECT number,
        id=newid()
 FROM master.dbo.spt_values
 WHERE type='P' AND number BETWEEN 1 AND LEN(@S) AND SUBSTRING(@S,number,1)=','
В таком случае никакого id и не надо, потому что number сам по себе уникален,
да ещё и возрастает от начала к концу строки!
14 июл 09, 14:14    [7413494]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить