2013-07-06 3 views
0

Я использую SQL Server 2008.Найти конкретное слово в колонке

Мои таблицы:

Расположение

------------------------ 
Id | LocationName 
------------------------ 
    1 | Bodakdev 
    2 | Thaltej Road 
    3 | Andheri East 
    4 | Noida Sector 2 

Компания

-------------------------------------------------------------------------- 
    CId | Address           | LocationId 
-------------------------------------------------------------------------- 
    11 | 301, GNFC Infotower, Bodakdev,     | NULL 
    12 | 307/308,Arundeep Complex       | NULL 
    13 | 7 Krishana Dyeing Compund, Nagardas rd., Andheri | NULL 
    14 | B-23 ,Ground Floor,Sector 2      | NULL 
-------------------------------------------------------------------------- 

В настоящее время LocationId в таблице Company - null. Если Address содержит любое местонахождение, то обновите LocationId.

Например, адрес РТВ - 11 содержит Bodakdev обновит LocationId 1, второй пример, Адрес ИДС - 13 содержит Andheri слово затем обновить LocationId 3.

Требуемая мощность:

CId | Address           | LocationId 
-------------------------------------------------------------------------- 
    11 | 301, GNFC Infotower, Bodakdev,     | 1 
    12 | 307/308,Arundeep Complex       | NULL 
    13 | 7 Krishana Dyeing Compund, Nagardas rd., Andheri | 3 
    14 | B-23 ,Ground Floor,Sector 2      | 4 
-------------------------------------------------------------------------- 

I попытался с помощью ниже запроса

SELECT 
    (LEN(Address) - LEN(REPLACE(Address, LocationName, '')))/LEN(LocationName) 

если Address содержит имя местоположения, то она будет г eturn количество случаев, в противном случае оно возвращается 0.

Но он не даст правильного выхода. Как я могу это сделать? Благодарю. Любое предложение будет оценено по достоинству.

+0

Вы хотите обновить строки в базе данных или получить запрос, достаточный для вывода? – ojblass

+0

@ojblass Я хочу обновить строки в базе данных, но сначала я пытаюсь получить идентификатор местоположения. – Prashant16

+0

Почему вы не используете ключевое слово 'like'? –

ответ

4

Try следующего запроса:

1.STEP1: сделать одну функцию, которая может разделить жало любого символа и возвращает вывод в табличном формате.

CREATE FUNCTION [dbo].[fnSplit](
    @sInputList VARCHAR(8000) -- List of delimited items 
    , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items 
) RETURNS @List TABLE (item VARCHAR(8000)) 

BEGIN 
DECLARE @sItem VARCHAR(8000) 
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0 
BEGIN 
SELECT 
    @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))), 
    @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList)))) 

IF LEN(@sItem) > 0 
    INSERT INTO @List SELECT @sItem 
END 

IF LEN(@sInputList) > 0 
INSERT INTO @List SELECT @sInputList -- Put the last item in 
RETURN 
END 

2.STEP2: используйте следующий запрос, чтобы получить ваше желание.

DECLARE @LOCATION AS TABLE (ID INT ,NAME VARCHAR(MAX)) 
DECLARE @COMPANY AS TABLE (CID INT , ADDRESS VARCHAR(MAX) , LOCATIONID INT)  

INSERT INTO @LOCATION VALUES(1,'Bodakdev') 
INSERT INTO @LOCATION VALUES(2,'Thaltej Road') 
INSERT INTO @LOCATION VALUES(3,'Andheri East') 
INSERT INTO @LOCATION VALUES(4,'Noida Sector 2') 

INSERT INTO @COMPANY VALUES(11,'301, GNFC Infotower, Bodakdev,' , NULL) 
INSERT INTO @COMPANY VALUES(12,'307/308,Arundeep Complex' , NULL) 
INSERT INTO @COMPANY VALUES(11,'7 Krishana Dyeing Compund, Nagardas rd., Andheri' , NULL) 
INSERT INTO @COMPANY VALUES(11,'B-23 ,Ground Floor,Sector 2' , NULL) 

UPDATE @Company 
SET 
LOCATIONID = B.ID 
FROM @COMPANY AS A , @LOCATION AS B 
WHERE 
1 = CASE WHEN 
      (
       SELECT COUNT(*) 
       FROM FNSPLIT(B.NAME , ' ') 
       WHERE A.ADDRESS LIKE '%' + ITEM + '%' 
      ) > 0 THEN 1 ELSE 0 END 

Это единственный способ сделать это. мы можем сделать это, используя также полный поиск текста.

+0

Я пробовал использовать LIKE, но это не дает ожидаемого результата – Prashant16

+0

Но каким образом вы использовали 'LIKE'? Именно такой? – stakx

+0

не получил ваш вопрос. можете ли вы объяснить это больше. –