如何按字母顺序显示下拉选项而不用担心经典 asp 中区分大小写?
How to display drop down options alphabetically without worrying about case sensitive in classic asp?
我的经典 ASP 页面中有一个下拉框,并使用 MS SQL 作为数据库。下拉列表包括以小写、大写和数字开头的品牌名称。
例如,分别为itcosmetics
、Colorpop Cosmetics
和5 Hour energy
。目前,此下拉列表是 showing/displaying 个按字母顺序排列的品牌,但按大小写排列,即小写、数字、大写。
换句话说,它首先按字母顺序显示所有小写品牌名称,然后按字母顺序显示带有数字的品牌,最后按字母顺序显示以大写字母开头的品牌名称。
但是,我正在尝试的是:我想根据字母顺序显示我的选项,而不用担心品牌名称的大小写。
例如:如果品牌名称是 1 apple
、applea
、Appleb
、3 fans
、balla
、Ballb
、cat
, 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
我的经典 ASP 页面中有一个下拉框,并使用 MS SQL 作为数据库。下拉列表包括以小写、大写和数字开头的品牌名称。
例如,分别为itcosmetics
、Colorpop Cosmetics
和5 Hour energy
。目前,此下拉列表是 showing/displaying 个按字母顺序排列的品牌,但按大小写排列,即小写、数字、大写。
换句话说,它首先按字母顺序显示所有小写品牌名称,然后按字母顺序显示带有数字的品牌,最后按字母顺序显示以大写字母开头的品牌名称。
但是,我正在尝试的是:我想根据字母顺序显示我的选项,而不用担心品牌名称的大小写。
例如:如果品牌名称是 1 apple
、applea
、Appleb
、3 fans
、balla
、Ballb
、cat
, 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
ORDER BY
有用的链接
- ORDER BY … COLLATE in SQL Server