如何使用T-sql内置函数获取子字符串

时间:2011-10-13 13:47:04

标签: tsql sql-server-2008

假设我在Mytable列Name中存储了一个类似“firstname lastname”的字符串。 那么我想在SQL中吸引名字和姓氏,如

select FirstName = substring(Name, ..),  LastName=substring(Name, ...) from Mytable

如何解决此问题?

3 个答案:

答案 0 :(得分:3)

您可以使用charindex查找空间的位置:

select FirstName = substring(Name, 1, charindex(' ', Name)),
       LastName = substring(Name, charindex(' ', Name) + 1, len(Name))
from MyTable

这充满了假设,例如:只有一个空间(如果我的名字是比利鲍勃哈里斯,或麦当娜怎么办?)

不是按照你要求的方式去做,而是使用PARSENAME可能会更好(正如另一条评论所说的那样!)。

答案 1 :(得分:3)

利用PARSENAME

SELECT
   PARSENAME(REPLACE(name, ' ', '.'), 2),
   PARSENAME(REPLACE(name, ' ', '.'), 1)
FROM
    MyTable;

编辑工作示例:

DECLARE @MyTable table (name varchar(25))
INSERT @MyTable 
    SELECT 'Joe Smith' 
    UNION SELECT 'Bill Jones' 
    UNION SELECT 'Billy Bob Braxton' 
    UNION SELECT 'Mark'

SELECT
   PARSENAME(REPLACE(name, ' ', '.'), 2),
   PARSENAME(REPLACE(name, ' ', '.'), 1)
FROM
    @MyTable;

输出:

------ --------
Bill   Jones
Bob    Braxton
Joe    Smith
NULL   Mark    

(4 row(s) affected)

答案 2 :(得分:-1)

您还可以考虑使用空格作为分隔符拆分字符串,然后将所选项目用作名字和姓氏