根据你的关系型数据库,这样的东西可以工作。这是专门为SQL塞雷尔语,并使用该接受一个字段,并在字符串中的位置,并返回字符串,直到下一个大写字母的功能:
select field, fname, mname, dbo.ReturnCapString(field,len(fname)+len(mname)+1) lname
from
(
select field, fname, dbo.ReturnCapString(field,len(fname)+1) mname
from
(
select field, dbo.ReturnCapString(field,1) fname
from yourtable
) t
) t2
和作用 - 对功能更主要的是看到ASCII
检查如果字符是资本或不:
CREATE FUNCTION ReturnCapString (@String VARCHAR(100), @Pos int)
RETURNS varchar(100)
AS
BEGIN
DECLARE @return varchar(100)
DECLARE @position INT
DECLARE @counter INT
SET @position = @Pos + 1
SET @counter = 1
SET @return = ''
WHILE @position <= DATALENGTH(@string) AND @return = ''
BEGIN
IF ASCII(SUBSTRING(@string, @position, 1)) BETWEEN 65 AND 90
SELECT @return = SUBSTRING(@string, @pos, @counter)
SET @position = @position + 1
SET @counter = @counter + 1
END
IF @return = ''
BEGIN
SET @return = SUBSTRING(@String, @Pos, LEN(@string))
END
RETURN @return
END
当然并且,SQL Fiddle证明。
顺便说一句 - 感谢您的有趣问题!虽然这是不完美的(不要认为什么将是100%完美的),如果你需要的潜在标志任何明显的问题,使用此琴:http://sqlfiddle.com/#!3/77f446/10
FLAG FIELD FNAME MNAME LNAME
JohnAlanSmith John Alan Smith
McDonalds Mc Donalds
X JimBobMacDonald Jim Bob Mac
哪个RDBMS您使用的? – sgeddes
用JimBobMacDonald这样的名字测试每个答案。您可能需要查找名称只有两个大写字母的查询,然后手动执行其他操作。 –
@sgeddes - 我正在使用Microsoft SQL Server 2005 Express Edition – Brady