我在数据库中有名字和姓氏的信息,这些信息可能以JOHN DOE、john DOE或JoHN dOE的形式存储,但最终我想要将其显示为John Doe。
其中,名字为John,姓氏为Doe。
请注意,还有其他的大写格式,例如John McDoe,John D'Oe,John de O和John van den Doe。
看到它被标记为 PHP:
要么
string ucfirst ( string $str );
将第一个单词的首字母大写
或者
string ucwords ( string $str );
将每个单词的首字母都大写
您可能想结合使用这些方法:
string strtolower ( string $str );
将所有名称规范化为小写。
我不确定您希望在哪里以及如何显示它,但如果是在网页上,您可以尝试使用CSS来更改其显示方式。尝试添加:
text-transform:capitalize;
.name { text-transform:capitalize;}
以下是来自php.net的示例:
$bar = 'HELLO WORLD!';
$bar = ucfirst($bar); // HELLO WORLD!
$bar = ucfirst(strtolower($bar)); // Hello world!
对于简单的名称,这将起作用。请注意特殊情况(如下面示例中的“Ronald McDonald”)。
在SQL Server中:
SELECT --step 2: combine broken parts into a final name
NAME_PARTS.FNAME_INITIAL + NAME_PARTS.REST_OF_FNAME AS FNAME
,NAME_PARTS.LNAME_INITIAL + NAME_PARTS.REST_OF_LNAME AS LNAME
FROM
( --step 1: break name into 1st letter and "everything else"
SELECT
UPPER(SUBSTRING(TEST.FNAME,1,1)) AS FNAME_INITIAL
,UPPER(SUBSTRING(TEST.LNAME,1,1)) AS LNAME_INITIAL
,LOWER(SUBSTRING(TEST.FNAME,2,LEN(TEST.FNAME))) AS REST_OF_FNAME
,LOWER(SUBSTRING(TEST.LNAME,2,LEN(TEST.LNAME))) AS REST_OF_LNAME
FROM
( --step 0: generate some test data
SELECT 'john' AS FNAME, 'doe' as LNAME
UNION SELECT 'SUZY', 'SMITH'
UNION SELECT 'bIlLy', 'BOb'
UNION SELECT 'RoNALD', 'McDonald'
UNION SELECT 'Edward', NULL
UNION SELECT NULL, 'Jones'
) TEST
) NAME_PARTS
在Oracle中
SELECT --step 2: combine broken parts into a final name
NAME_PARTS.FNAME_INITIAL || NAME_PARTS.REST_OF_FNAME AS FNAME
,NAME_PARTS.LNAME_INITIAL || NAME_PARTS.REST_OF_LNAME AS LNAME
FROM
( --step 1: break name into 1st letter and "everything else"
SELECT
UPPER(SUBSTR(TEST.FNAME,1,1)) AS FNAME_INITIAL
,UPPER(SUBSTR(TEST.LNAME,1,1)) AS LNAME_INITIAL
,LOWER(SUBSTR(TEST.FNAME,2,LENGTH(TEST.FNAME))) AS REST_OF_FNAME
,LOWER(SUBSTR(TEST.LNAME,2,LENGTH(TEST.LNAME))) AS REST_OF_LNAME
FROM
( --step 0: generate some test data
SELECT 'john' AS FNAME, 'doe' as LNAME FROM DUAL
UNION SELECT 'SUZY', 'SMITH' FROM DUAL
UNION SELECT 'bIlLy', 'BOb' FROM DUAL
UNION SELECT 'RoNALD', 'McDonald' FROM DUAL
UNION SELECT 'Edward', NULL FROM DUAL
UNION SELECT NULL, 'Jones' FROM DUAL
) TEST
) NAME_PARTS
结合 PHP 简写函数 strtolower 和 ucwords 可以解决您的问题:
function ucname($f, $l)
{
return ucwords(strtolower($f." ".$l));
}
echo ucname($fname, $lname);
另外需要注意的是,您可以在许多不同的阶段进行数据美化: