在SQL Query中,我需要使用我的列的select查询,如下所示的值。 结果必须是第一个空格之后和第一个空格之后的文本('
create Table Test_Table (Column1 Varchar(50))
Insert into Test_Table Values
('0636 KAVITHI (LOC)'),
('0638 SRI KRISHNA (NAT)'),
('0639 SELVAM'),
('0643 GOOD SERVICE (LOC)'),
('0644 FINA CARE EVENT (LOC)')
我需要在第一个''和'('
之间找到字符串KAVITHI
SRI KRISHNA
SELVAM
GOOD SERVICE
FINA CARE EVENT
答案 0 :(得分:1)
CHARINDEX()
可用于查找特定字符的位置。
OUTER APPLY
可用于查找空格位置和括号字符,并将它们存储在可以重复使用的位置。
SUBSTRING()
可用于查找空格和大括号之间的文本。
编辑 已添加CASE
以应对不包含(
的值。
SELECT
SUBSTRING(
test_table.column1, -- the field we're searching
stats.idx_space + 1, -- starting from the character after the first space
CASE
WHEN stats.idx_brace > stats.idx_space
THEN stats.idx_brace
ELSE stats.idx_eos
END
-
stats.idx_space -- for as many characters as there are between the space and the brace
)
FROM
test_table
OUTER APPLY
(
SELECT
CHARINDEX(' ', test_table.column1) AS idx_space, -- position of the first space
CHARINDEX('(', test_table.column1) AS idx_brace, -- position of the first brace
LEN(test_table.column1) AS idx_eos -- position of the end-of-string
)
AS stats
编辑: 根据要求提供单个“行”。
请注意,将此强制为单行确实会使读取,维护和调整变得更加困难。 APPLY
最强的用例之一是保持DRY (不要重复自己)原则。
此查询多次重复几个部分:
- find the first space
重复2次
- find the first brace
重复3次
SELECT
SUBSTRING(
test_table.column1,
CHARINDEX(' ', test_table.column1) + 1,
CASE
WHEN CHARINDEX('(', test_table.column1) > CHARINDEX(' ', test_table.column1)
THEN CHARINDEX('(', test_table.column1)
ELSE LEN(test_table.column1)
END
-
CHARINDEX('(', test_table.column1)
)
FROM
test_table
答案 1 :(得分:1)
另一种不使用OUTER APPLY的方法。
function foto_start(imageSrc){
document.getElementById('1').src=imageSrc;
}
<img id="1" onmouseover="foto_start('http://example.com/image2.jpg')" onmouseout="foto_stop()" src="http://example.com/image1.jpg" />
输出
SELECT CASE WHEN Column1 LIKE '%(%'
THEN SUBSTRING(RIGHT(Column1,LEN(Column1)-CHARINDEX(' ',Column1)),0,
CHARINDEX('(',RIGHT(Column1,LEN(Column1)-CHARINDEX(' ',Column1)),0))
ELSE RIGHT(Column1,LEN(Column1)-CHARINDEX(' ',Column1))
END AS Trimmed
FROM Test_Table