Нужна помощь по этому SQL - PullRequest
0 голосов
/ 11 июля 2010

Вот вопрос:

+--------------+
Ships          |
+--------------+
Duke of north  |
---------------+
Prince of Wales|
---------------+
Baltic         |
---------------+

Мне нужно заменить все символы между первым и последним пробелами (исключая эти пробелы) символами звездочки (*). Количество звездочек должно быть равно количеству замененных символов.

например: "Герцог Севера" должен быть заменен на "Герцог ** Север", Мне удалось вырезать «из» из «Герцога Севера», но я действительно застрял с заменой, может кто-нибудь дать мне несколько идей, изучаю SQL в MS SQL Server 2005, пожалуйста, помогите. Мне не нужен точный ответ, просто дай мне несколько идей,

select 
case when charindex(' ',ship,(charindex(' ',ship,1))+1) > 0 
     then substring(ship,(charindex(' ',ship,1))+1,((charindex(' ',ship,(charindex(' ',ship,1))+1)) - (charindex(' ',ship,1))))
end "Replace"
from 
outcomes

Это не домашнее задание, я учу SQL.

Ответы [ 3 ]

3 голосов
/ 11 июля 2010
SELECT 
CASE WHEN ship NOT LIKE '% % %' THEN ship
ELSE
LEFT(ship,CHARINDEX(' ',ship)) + 
      REPLICATE('*', LEN(ship)- CHARINDEX(' ',REVERSE(ship)) - CHARINDEX(' ',ship)) +
      RIGHT(ship, CHARINDEX(' ',REVERSE(ship)))
END
FROM outcomes

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

ALTER TABLE dbo.outcomes ADD
    displayName  AS CASE WHEN ship NOT LIKE '% % %' THEN ship
ELSE
LEFT(ship,CHARINDEX(' ',ship)) + 
      REPLICATE('*', LEN(ship)- CHARINDEX(' ',REVERSE(ship)) - CHARINDEX(' ',ship)) +
      RIGHT(ship, CHARINDEX(' ',REVERSE(ship)))
END PERSISTED 
1 голос
/ 11 июля 2010
select 
isnull(case when charindex(' ',ship,(charindex(' ',ship,1))+1) > 0 
     then substring(ship,1,charindex(' ',ship,1))+space(1)+replace(substring(ship,(charindex(' ',ship,1))+1,((charindex(' ',ship,(charindex(' ',ship,1))+1)) - (charindex(' ',ship,1)))),substring(ship,(charindex(' ',ship,1))+1,((charindex(' ',ship,(charindex(' ',ship,1))+1)) - (charindex(' ',ship,1)))),replicate('*',len(substring(ship,(charindex(' ',ship,1))+1,(charindex(' ',ship,(charindex(' ',ship,1))+1)) - (charindex(' ',ship,1))))))+space(1)+substring(ship,(charindex(' ',ship,(charindex(' ',ship,1))+1)),(len(ship)))
end,ship) "Replace"
from 
outcomes

После долгой попытки получил ответ самостоятельно !!!

1 голос
/ 11 июля 2010

Часть изучения SQL - научиться определять задачи, которые не должны выполняться в SQL. Это должно быть оставлено как часть логики отображения и должно оставаться вне механизма базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...