【发布时间】:2010-09-16 00:11:17
【问题描述】:
我的数据库中有 fname 和 lname,名称可以存储为 JOHN DOE 或 john DOE 或 JoHN dOE,但最终我想将其显示为 John Doe
fname 是 John,lname 是 Doe
【问题讨论】:
我的数据库中有 fname 和 lname,名称可以存储为 JOHN DOE 或 john DOE 或 JoHN dOE,但最终我想将其显示为 John Doe
fname 是 John,lname 是 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;}
如果您将名称放在 div 或 span 中,并带有 class="name"。当然,这不会以任何方式改变数据库条目,但我不清楚哪个更可取。
【讨论】:
来自php.net的例子:
$bar = 'HELLO WORLD!';
$bar = ucfirst($bar); // HELLO WORLD!
$bar = ucfirst(strtolower($bar)); // Hello world!
请记住有关语言环境的注释...
【讨论】:
对于简单的名称,这将起作用。谨防特殊情况(如以下示例中的“麦当劳叔叔”)。
在 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
在甲骨文中
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);
另一方面,请记住,您可以在许多不同阶段进行这种数据美化:
【讨论】:
将名称更改为小写,然后在 fname & lname 的第一个字母上添加 ('A' - 'a')。
【讨论】: