我想删除string
的部分内容。
我们有一个表:地点
mk-MK=New York; sq-AL=Nej York; en-US=New York
mk-MK=London; sq-AL=London; en-US=London
mk-MK=Paris; sq-AL=Paris; en-US=Paris
我想删除所有内容,只保留sq-AL=LocationName
。
我希望结果是:
sq-AL=Nej York;
sq-AL=London;
答案 0 :(得分:1)
这是规范化数据库重要性的又一个例子 在标准化数据库中,您将拥有一个包含2列的表,一列用于文化(sq-Al,en-US etc`),另一列用于值。我会更进一步,将文化放在查找表中。
但是,由于情况并非如此,您必须使用字符串操作来获取特定文化的值。您可以使用SUBSTRING和CHARINDEX找到您想要的特定图案 这将适用于我列出的样本数据所代表的任何情况。
-- Create the table and insert sample data
CREATE TABLE Location ([Name] varchar(100))
INSERT INTO Location ([Name]) VALUES
('en-US=Huston; mk-MK=Huston; sq-AL=Huston;'), -- end of the row, with the ending ';'.
('en-US=New York; mk-MK=New York; sq-AL=Nej York'), -- end of the row, without the ending ';'.
('mk-MK=London; sq-AL=London; en-US=London'), -- middle of the row
('sq-AL=Paris; en-US=Paris; mk-MK=Paris') -- begining of the row
SELECT SUBSTRING(Name,
CHARINDEX('sq-AL=', Name), -- index of 'sq-AL='
CASE WHEN CHARINDEX(';', Name, CHARINDEX('sq-AL=', Name)) > 0 THEN -- If there is a ';' after 'sq-AL='.
CHARINDEX(';', Name, CHARINDEX('sq-AL=', Name)) -- index of the first ';' after 'sq-AL='
- CHARINDEX('sq-AL=', Name) -- index of the first ';' - the index of 'sq-AL=' will give you the length for `Nej York`
ELSE
LEN(Name)
END
) + ';'
FROM Location
-- Cleanup
DROP Table Location
答案 1 :(得分:0)
您可以使用CHARINDEX
功能。我已经尝试使用变量as,
declare @locations varchar(100) = 'mk-MK=New York; sq-AL=Nej York; en-US=New York'
select LEFT(
RIGHT(
@locations, LEN(@locations)-CHARINDEX(';',@locations)
--output here : sq-AL=Nej York; en-US=New York
)
,CHARINDEX(';',@locations)
) + ';'
--Final Output : sq-AL=Nej York;
在您的情况下:查询将为,
select LEFT(
RIGHT(
Name, LEN(Name)-CHARINDEX(';',Name)
--output here : sq-AL=Nej York; en-US=New York
)
,CHARINDEX(';',Name)
) + ';'
FROM Locations