我的经典ASP页面中有一个下拉框,并使用MS SQL作为数据库。下拉列表包括以小写字母,大写字母和带有数字的起始品牌名称开头的品牌名称。
例如,分别为itcosmetics
,Colorpop Cosmetics
和5 Hour energy
。目前,此下拉列表按字母顺序显示/显示品牌,但大小写,小写,数字,大写。
换句话说,它首先按字母顺序显示所有小写品牌名称,然后按字母顺序显示品牌名称,最后按字母顺序以大写字母开头。
然而,我正在尝试的是:我想根据字母顺序显示我的选项,而不必担心品牌名称的情况。
例如:如果品牌名称为1 apple
,applea
,Appleb
,3 fans
,balla
,Ballb
,{{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>
,但输出中没有变形。你能帮我吗?
答案 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)"