Запрос с Like

deadean
Дата: 07.06.2011 23:02:53
Ребят, слабоват в регулярных выражениях, как при помощи LIKE вытянуть например, чтобы имя состояло из 3 слов? Заранее благодарю!
qwerty777
Дата: 07.06.2011 23:36:48
qwerty777
Дата: 07.06.2011 23:44:35
Sorry, это
like '%[ ]%[ ]%'
не катит. Поторопился.

А чтобы найти имя, состоящее из трех слов, лучше посчитать пробелы.
kDnZP
Дата: 08.06.2011 00:06:22
deadean, как пример:

DECLARE @tbl TABLE (a varchar(50))
INSERT INTO @tbl(a)
SELECT 'Проверка  1 2' UNION ALL SELECT 'тест тест   тест  ' UNION ALL SELECT 'раз два три четыре'


SELECT * FROM @tbl t
WHERE LEN(REPLACE(REPLACE(t.a,'  ',' '),'  ',' '))=LEN(REPLACE(REPLACE(REPLACE(t.a,'  ',' '),'  ',' '),' ',''))+2
Maxx
Дата: 08.06.2011 00:22:15
   declare @x nvarchar(20)
   set @x = N'1 2 3'
   if @x like '[^ ]%[ ]%[^ ]%[ ]%[^ ]%'
       print '3 space'
   else  
      print 'another count of spaces' 
Maxx
Дата: 08.06.2011 00:50:30
Maxx
   declare @x nvarchar(20)
   set @x = N'1 2 3'
   if @x like '[^ ]%[ ]%[^ ]%[ ]%[^ ]'
       print '3 space'
   else  
      print 'another count of spaces' 


вроде так покраще
kDnZP
Дата: 08.06.2011 01:02:53
Maxx,
set @x = N'1 2 3 4 5'
А если так?
Maxx
Дата: 08.06.2011 01:05:59
kDnZP,

мдя неподходит тада
Maxx
Дата: 08.06.2011 01:07:28
Maxx
kDnZP,

мдя неподходит тада


все таки иногда так нехватет регулярных иногда, може чет еще счас выдумаю
kDnZP
Дата: 08.06.2011 01:13:34
Maxx, ну мне видится либо вариант с реплейсами (при этом долгоиграющие пробелы или другие разделители) реплейсить 16 в 8, 8 в 4, 4 в 2, 2 в 1, 2 в 1 - в зависимости от длины поля. Либо же раскладывать строку по словам, с набором разделителей, считать их количество, а потом при необходимости че-то делать.

Регекспов не хватает, это правда. :)