我有一个包含4个varchar字段的表,我需要根据列是否为空来订购。
所以我的表结构是:
start_price reserve_price buy_now_price current_bid_amount
---------------------------------------------------------------------
50.00 50.00 empty (not null) (Null)
190 190 empty (not null) (Null)
150 150 empty (not null) (Null)
20 150 empty (not null) (Null)
550 600 empty (not null) (Null)
我在下面有一个订单条款,但似乎没有正确排序。目前,结果订购190,150,50,20,550。
COALESCE命令(CAST(
al
。current_bid_amount
已签名), CAST(al
。buy_now_price
AS SIGNED),CAST(al
。start_price
AS 签名),CAST(al
。reserve_price
AS签名))ASC
基本上我需要根据current_bid_amount,buy_now_price,start_price,reserve_price以最低的顺序排序。因此,如果current_bid_amount和buy_now_price为空,请使用start_price。如果current_bid_amount为空,但buy_now_price不为,请使用buy_now_price。如果current_bid_amount中有值,则使用该值进行订购。
非常感谢。
答案 0 :(得分:1)
将空字符串转换为已签名为0.所以你的buy_now_price可能会覆盖所有内容,因为它是空的但不是null。然后,您基本上不会进行排序,因为您的合并将始终为所有项目评估为0.
mysql> select cast('' as signed);
+--------------------+
| cast('' as signed) |
+--------------------+
| 0 |
+--------------------+
1 row in set, 1 warning (0.00 sec)
mysql> select cast(null as signed);
+----------------------+
| cast(null as signed) |
+----------------------+
| NULL |
+----------------------+
1 row in set (0.00 sec)