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

How to display drop down options alphabetically without worrying about case sensitive in classic asp?

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

例如,分别为itcosmeticsColorpop Cosmetics5 Hour energy。目前,此下拉列表是 showing/displaying 个按字母顺序排列的品牌,但按大小写排列,即小写、数字、大写。

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

但是,我正在尝试的是:我想根据字母顺序显示我的选项,而不用担心品牌名称的大小写。

例如:如果品牌名称是 1 appleappleaAppleb3 fansballaBallbcat, Doll.

目前显示的下拉选项如下:

applea
balla
cat
1 apple
3 fans
Appleb
Ballb
Doll

但我想要如下内容:

1 apple
3 fans
applea
Appleb
balla
Ballb
cat
Doll

我该怎么做?

我的代码:

<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>

我尝试在 SQL 语句的末尾写 ORDER BY brand,但输出中没有变化。那么你能帮帮我吗?

看起来,您目前根本没有对结果进行排序,所以您得到的是 SQL 服务器关心的任何默认顺序。

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

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

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

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

您可能正在使用带有 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 不要忘记在经典 ASP.

中的 SQL 字符串中指定 ORDER BY

有用的链接

  • ORDER BY … COLLATE in SQL Server