Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从person';SQL中的全名是什么?_Sql_Sql Server 2008 - Fatal编程技术网

如何从person';SQL中的全名是什么?

如何从person';SQL中的全名是什么?,sql,sql-server-2008,Sql,Sql Server 2008,我正在寻找一种最简单的方法,将名字和姓氏分开,并去掉中间的首字母。该字段的当前布局为[姓氏][名][MI]。而且,中间的首字母并不总是存在。下面是我当前的代码,我只是不知道如何在不写case语句的情况下删掉名字中间的首字母 SELECT SUBSTRING(h.Name, CHARINDEX(',', h.Name, 0) + 2, LEN(h.Name) - CHARINDEX(',', h.Name, 0)), 0 as FirstName ,SUBSTRING(h.Name, 0,

我正在寻找一种最简单的方法,将名字和姓氏分开,并去掉中间的首字母。该字段的当前布局为[姓氏][名][MI]。而且,中间的首字母并不总是存在。下面是我当前的代码,我只是不知道如何在不写case语句的情况下删掉名字中间的首字母

SELECT SUBSTRING(h.Name, CHARINDEX(',', h.Name, 0) + 2, LEN(h.Name) - CHARINDEX(',', h.Name, 0)), 0 as FirstName
    ,SUBSTRING(h.Name, 0, CHARINDEX(',', h.Name, 0)) as LastName
FROM Members

我做了以下一些假设:

1-名字总是超过一个字符。
2-中间初始值前面总是有空格。
3-数据被修剪

如果上述任何一项不正确,此代码将返回
NULL
。如果您的数据未被修剪,您可以在下面的
@n
的所有实例上使用
RTRIM
,以减轻影响

declare @n as varchar(50)
set @n = 'Smith, John A'
select @n, 
    case 
        when SUBSTRING(@n, LEN(@n) - 1, 1) = ' ' 
        then SUBSTRING(@n, LEN(@n), 1) 
    end

这个系统的业务规则是什么?它将永远是:

空格
可能的中间首字母

还有什么其他排列方式可以存在


它永远是空格吗?因为这样你就可以选择正确的三个字符,寻找空格和句点,然后删除三个字符。

我觉得重要的是要指出:无论商业决策如何。是的,你的假设是正确的,尽管我一直在寻找一种使用案例陈述的方法,但这种方法确实有效,我想不出任何其他方法。谢谢
select  REPLACE(firstName+ISNULL(middleName+' ','')+ISNULL( lastName +' ',''),'  ',' ') as 'name'  from  Contacts