如何按字母顺序显示下拉选项而不必担心经典asp中的区分大小写?

时间:2016-03-07 15:37:38

标签: sorting vbscript asp-classic

我的经典ASP页面中有一个下拉框,并使用MS SQL作为数据库。下拉列表包括以小写字母,大写字母和带有数字的起始品牌名称开头的品牌名称。

例如,分别为itcosmeticsColorpop Cosmetics5 Hour energy。目前,此下拉列表按字母顺序显示/显示品牌,但大小写,小写,数字,大写。

换句话说,它首先按字母顺序显示所有小写品牌名称,然后按字母顺序显示品牌名称,最后按字母顺序以大写字母开头。

然而,我正在尝试的是:我想根据字母顺序显示我的选项,而不必担心品牌名称的情况。

例如:如果品牌名称为1 appleappleaAppleb3 fansballaBallb,{{1 },cat

目前,其显示下拉选项如下:

applea
balla
cat
1 apple
3 fans
Appleb
Ballb
Doll

但我想要以下内容:

1 apple
3 fans
applea
Appleb
balla
Ballb
cat
Doll

我该怎么做?

我的代码:

Doll

我尝试在SQL语句结束时编写<select> <OPTION value=0>-- SELECT --</OPTION> <% DIM RS, varQueryBrand, varBrand IF Request.QueryString("brandID") <> "" THEN varQueryBrand = Request.QueryString("brandID") ELSE varQueryBrand = "SELECT" End IF SQL = "SELECT DISTINCT(brand) as brand FROM tblproduct" SET RS=objConn.Execute(SQL) IF NOT (RS.BOF and RS.EOF) THEN WHILE NOT RS.EOF varBrand = RS("brand") IF LCase(varQueryBrand) = LCase(varBrand) THEN Response.Write "<option selected value=""" & replace(RS("brand")," & ","@") & """>" & RS("brand") & "</option>" ELSE Response.Write "<option value=""" & replace(RS("brand")," & ","@") & """>" & RS("brand") & "</option>" End IF RS.MoveNext WEND END IF RS.close SET RS = nothing %> </select> ,但输出中没有变形。你能帮我吗?

2 个答案:

答案 0 :(得分:2)

您可能正在使用其中包含CS标识的排序规则,例如Latin1_General_CS_AS

要避免Unicode排序,请切换到二进制排序规则以获得预期的排序顺序。

SELECT DISTINCT brand 
FROM tblproduct 
ORDER BY brand COLLATE Latin1_General_bin

稍微麻烦的方法是使用子查询来包装Brand列的小写版本并将其用于排序。

SELECT x.brand
FROM (
  SELECT DISTINCT brand, LOWER(brand) [brand_lower]
  FROM tblproduct
) x
ORDER BY x.brand_lower

由于@Martha point's out不要忘记在经典ASP中的SQL字符串中指定ORDER BY

有用的链接

答案 1 :(得分:0)

从它看起来,你现在根本没有对结果进行排序,所以你得到了SQL Server关心的默认顺序。

大多数数据库都自动设置为不区分大小写的排序,因此除非您的数据库设置奇怪,否则以下内容应该有效:

SQL = "SELECT DISTINCT brand FROM tblproduct ORDER BY brand"

如果这不起作用且你不想搞乱COLLATION设置,你可以按字段的全小写(或全大写)版本排序:

SQL = "SELECT DISTINCT brand FROM tblproduct ORDER BY LOWER(brand)"