从数据库表中分割全名的第一个中间名和姓氏 [英] Split first middle and last names from full name from the data base table

查看:97
本文介绍了从数据库表中分割全名的第一个中间名和姓氏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

eid ename
1   kula sekhar reddy
2   sachin ramesh tendulker
3   mahindra singh dhoni
4   ravi chandra aswin





所需输出如下:





Required Output like bellow

eid   firstname  middlename   lastname
1      kula       sekhar       reddy
2      sachin     ramesh       tendulker
3       mahindra  singh        dhoni
4       ravi      chandra     aswin





我尝试过:



请提供查询以显示如上所示的名称



What I have tried:

Please give Query to display names like above

推荐答案

您可能想阅读 Falsehoods Programmers Believe About姓名| Kalzumeus软件 [ ^ ]


这是一个坏主意:通过拆分它然后使用三列来保存数据而不是一列,在数据输入点处理它会好得多(连接是微不足道的,但是SQL的字符串处理是......嗯...最好是原始的。



但它可以完成:sql server - SQL:解析全名中的名字,中间名和姓字段 - 堆栈溢出 [ ^ ] - 它不漂亮,更改起来并不容易:但它确实有效。



见我的意思是处理错误的方法吗?
It's a bad idea: it's much better to handle it at the data entry point by splitting it then and using three columns to hold the data instead of one (concatenation is trivial, but SQL's string handling is ... um ... primitive at best.

But it can vbe done: sql server - SQL: parse the first, middle and last name from a fullname field - Stack Overflow[^] - it's not pretty, it's not easy to change: but it works.

See what I mean about it being the wrong way to handle it?


从一个字段中的起始名称存储是不错的(如果你需要将它分开),因为SQL在字符串操作中是一个但很弱...

直到SQL 2016那里根本没有内置的分割功能...

但是可以(但最好重新规范化你的数据)......

2016年: STRING_SPLIT(Transact-SQL)| Microsoft Docs [ ^ ]

2016年之前(与2016版本一样):

It is bad idea to store from the beginning name in one field (if you need it separated), as SQL is a but weak in string manipulation...
Until SQL 2016 there is no built in split function at all...
however it is possible (but better to re-normalize your data)...
In 2016: STRING_SPLIT (Transact-SQL) | Microsoft Docs[^]
Pre 2016 (works just like the 2016 version):
CREATE FUNCTION STRING_SPLIT (@STR NVARCHAR(MAX), @DEL NCHAR(1) = ' ')
RETURNS
	@RV TABLE (VALUE NVARCHAR (MAX))
AS
BEGIN

 DECLARE @PART NVARCHAR(MAX)
 DECLARE @POS INT

 WHILE CHARINDEX(@DEL, @STR) > 0
 BEGIN
  SELECT @POS  = CHARINDEX(@DEL, @STR)  
  SELECT @PART = SUBSTRING(@STR, 1, @POS - 1)

  INSERT INTO @RV 
  SELECT @PART

  SELECT @STR = SUBSTRING(@STR, @POS + 1, LEN(@STR) - @POS)
 END

 INSERT INTO @RV
 SELECT @STR

 RETURN
END


这篇关于从数据库表中分割全名的第一个中间名和姓氏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆