我认为您所追求的是仅输出以该字母开头的第一个波段的字母。实现此目的的一种方法是稍微更改您的查询(注意我在这里使用我认为是 SQL-92 语法,但可能有更好的方法来获取特定数据库中的第一个字母):
select
band_name,
SUBSTRING(band_name from 1 for 1) AS first_letter
from
bands
order by
band_name
这将为您提供查询中的第一个字母。
如果您想将所有带数字首字母的波段组合在一起,那么您可以使用 SQL 的 CASE 语句来执行此操作(您可能需要在 DBMS 中找到与 ascii() 等效的语句)。如果这更容易,您还可以反转逻辑并匹配“普通”字母并将其他所有内容归为“0-9 和标点符号”类别。我认为这就是许多音乐系统所做的(我在想 iPhone 上的 iTunes,但我相信还有其他的)
select
band_name,
CASE
WHEN ascii(left(band_name, 1)) BETWEEN 48 AND 57 THEN '0-9'
ELSE left(band_name, 1)
END AS first_letter
from
bands
order by
band_name
现在,您可以使用该额外列以及 cfoutput 的 group 属性来帮助获得所需的输出。
<UL>
<cfoutput query="bandNameList" group="first_letter">
<LI> #first_letter#
<UL>
<cfoutput>
<LI> #band_name# </LI>
</cfoutput>
</UL>
</LI>
</cfoutput>
</UL>