SQL查询,当值同时为Int和Characters时排序

时间:2019-06-07 16:59:58

标签: sql sorting

我在一个客户网站上工作,我们在他们的网站上有一个订单,允许他们选择部门,然后选择特定于部门的产品,最后,一旦他们选择了产品,他们将获得数量选项。所有这些字段都是通过SQL查询从一个数据库中填充的,该数据库列出了所有部门,产品和数量选项。

让我在开始之前说我是SQL的初学者,这是我自己的一个小项目,我正在努力简化某些流程。所以,对我好一点。

我在排序时遇到的问题,我不得不将“数量”数据库列设置为VARCHAR,因为它不仅是整数,例如某些产品可能仅具有250、500、1000的数量选项,而其他产品可能有10个打击垫,20个打击垫,50个打击垫等数量的选择。

我们正在使用的forms模块具有一个基本的SQL Query输入,因为它们提供的查询示例只是语法字符串,这与我在尝试解决此问题的某些研究中所看到的不一样。

这是我编写的用于回调数据的查询:

B();

所以我的问题是,当表单中的下拉字段填充某些我的产品(仅是INT而不是正常的升序)时,此数据不是INT的:

select distinct Quantity 
from GSD_Products 
where Form = [Form] 
order by Quantity ASC

我希望它们显示为:

1000
250
2500
500
5000

其他包含int和字符混合的产品数量按适当的顺序列出,例如:

10个护垫,20个护垫,50个护垫。

有人确实向我指出了可能解析NVARCHAR值的方向,并且我一直在尝试对此进行研究,但是我缺乏知识只是了解在这种情况下可以尝试哪些选项的障碍。

2 个答案:

答案 0 :(得分:0)

您的值存储为字符串,因此它们按字符串排序。一种方法是将它们转换,就像这样:

order by cast(Quantity as int) ASC

如果必须同时处理数字和非数字值,则另一种方法是按长度和值排序:

order by len(Quantity), Quantity

这不会带来类型转换错误的风险。

答案 1 :(得分:0)

我会在产品表上还有一个名为description的字段,您可以在其中放置“ Pads”。如果sql查询控件的顺序是,那么您可以简单地将控件中的int和char列连接起来,而不是order by子句。如果该控件像一个组合框一样控制了订单,那么我将只在控件中放入数量,然后在其旁边放置一个标签以显示说明。