如何在SQL中只返回不同长度的字符串的一部分?

JM1*_*JM1 4 sql t-sql sql-server

我有一个只有1列包含字符串的表.我只想获取电子邮件地址.我怎样才能做到这一点?我查看了Substring/Ltrim等,但我还没能把如何只提取部分字符串拼凑起来.我对SQL很新.谢谢您的帮助!

Column1:

John Smith     Email: John.Smith@987456email.com  Terminate:

Jacqueline Ryan    Email: Jacqueline.Ryan@987456email.com     Terminate:
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 9

假设电子邮件以前缀为前缀Email:且不包含空格,您可以Email:在下一个空格(或字符串结尾)之前和之前取所有字符;

SELECT CASE WHEN CHARINDEX(' ', a.em) <> 0 
            THEN SUBSTRING(a.em, 1, CHARINDEX(' ', a.em) - 1)
            ELSE a.em END email
FROM (
  SELECT SUBSTRING(column1, CHARINDEX('Email: ', column1) + 7, LEN(column1)) em
  FROM mytable
) a
Run Code Online (Sandbox Code Playgroud)

子查询保留后面Email:的任何内容,外部查询会切断跟踪下一个空格(或字符串结尾)的所有内容.

该查询假定存在Email:标记,如果不能保证,则您将要使用a WHERE来确保仅返回已返回的行.

一个要测试的SQLfiddle.