我的任务是显示看起来像Foo - Bar
,Foo-Bar
Foo - Bar
,Foo!.,-Bar
,Foo...-Bar
的字符串,我需要显示它仅限Foo
。含义我必须删除-
符号后面的所有字符以及它之前的所有特殊字符。是否有一个我可以使用的简单函数可以满足我给出的所有字符串实例所需的输出:Foo
?我们使用SQL Server 2008 r2。
编辑:我需要提一下,Foo和Bar这两个词只是实际字符串的一种表示,所以编码字符串长度是不行的。
答案 0 :(得分:1)
试试这个
controller
答案 1 :(得分:1)
我提出了这个问题(感谢John Cappelletti提供的样本数据,请在未来的问题上自行完成):
Declare @YourTable table (col varchar(50))
Insert into @YourTable values
('Foo - Bar')
,('Foo-Bar')
,('Foo - Bar')
,('Foo!.,-Bar')
,('Foo...-Bar')
,('aaa Foo - Bar aaa')
查询:
SELECT col,
LEFT(BeforeDash, LEN(BeforeDash) - PATINDEX('%[a-z]%', REVERSE(BeforeDash))+1)
FROM
(
SELECT col, LEFT(col, CHARINDEX('-', col)) As BeforeDash
FROM @YourTable
) derived
结果:
col Display
Foo - Bar Foo
Foo-Bar Foo
Foo - Bar Foo
Foo!.,-Bar Foo
Foo...-Bar Foo
aaa Foo - Bar aaa aaa Foo
答案 2 :(得分:0)
Declare @YourTable table (col varchar(50))
Insert into @YourTable values
('Foo - Bar')
,('Foo-Bar')
,('Foo - Bar')
,('Foo!.,-Bar')
,('Foo...-Bar')
,('aaa Foo-Bar aaa')
,('There is no Bar-Foo here')
Declare @Search varchar(50) = 'Foo - Bar'
Select *
,Display = case when col like '%'+Replace(@Search,' ','%')+'%'
then Left(@Search,charindex('-',@Search)-1)
else col
end
From @YourTable
返回
col Display
Foo - Bar Foo
Foo-Bar Foo
Foo - Bar Foo
Foo!.,-Bar Foo
Foo...-Bar Foo
aaa Foo-Bar aaa Foo
There is no Bar-Foo here There is no Bar-Foo here
答案 3 :(得分:-1)
DECLARE @STRING VARCHAR(2000)
SET @STRING = 'FOO - DEPTH'
SELECT LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(SUBSTRING(@STRING, 0, CHARINDEX('-', @STRING)),'!',''),'.',''),',','')))