我有一个像这样的选择语句:
SELECT ColumnA,
CASE ColumnB = 'England' THEN ...
在THEN语句之后的部分中,我想从ColumnC中获取数字,
e.g。 ColumnC值= ABC 123 DEF,我需要'123'部分。
当'123'总是在字符串中只有2个空格之间时,是否有人知道我可以用来在select中执行此操作的sql代码? (MS SQL)
答案 0 :(得分:3)
主要关键是您需要使用ColumnC LIKE '% % %'
,以便在数据不包含两个空格时不会失败。
如果您的号码长度少于20个字符,则可以使用此
SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
RTRIM(LEFT(REPLACE(STUFF(columnc, 1, PatIndex('% %', columnc), ''), ' ', REPLICATE(' ', 20)),20))
ELSE ....
或者你可以使用这个
SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
SUBSTRING(
SUBSTRING(
ColumnC,
1,
CHARINDEX(' ',ColumnC,CHARINDEX(' ', ColumnC)+1)-1),
1+CHARINDEX(' ', ColumnC),
LEN(ColumnC))
ELSE ....
答案 1 :(得分:2)
您可以结合使用CHARINDEX
和SUBSTRING
:
DECLARE @Test TABLE(ColumnC varchar(100))
INSERT @Test
VALUES ('ABC 123 DEF')
SELECT SUBSTRING(ColumnC,
CHARINDEX(' ', ColumnC) + 1, -- first space
CHARINDEX(' ', ColumnC, CHARINDEX(' ', ColumnC) + 1)
- CHARINDEX(' ', ColumnC)) -- length from first to second space
FROM @Test
这对于提供的示例字符串有效。
答案 2 :(得分:0)
SUBSTRING_INDEX(SUBSTRING_INDEX( ColumnC , ' ', 2 ),' ',-1)