MySQL按大小写顺序将Tinyint转换为字符串
我有以下疑问:MySQL按大小写顺序将Tinyint转换为字符串,mysql,sql-order-by,case,Mysql,Sql Order By,Case,我有以下疑问: SELECT id, display_order FROM data_element_value WHERE key_id = 32 ORDER BY CASE WHEN (display_order IS NOT NULL) THEN display_order ELSE `value` END 预期产出为: id display_o
SELECT
id,
display_order
FROM
data_element_value
WHERE
key_id = 32
ORDER BY
CASE WHEN (display_order IS NOT NULL) THEN
display_order
ELSE
`value`
END
预期产出为:
id display_order
1 1
13 2
15 3
16 10
但是,我得到了:
id display_order
1 1
16 10
13 2
15 3
我已尝试将显示顺序
强制转换为未签名
:
CASE WHEN (display_order IS NOT NULL) THEN
CAST(display_order as UNSIGNED)
ELSE
`VALUE`
END
我也试过:
CASE WHEN (display_order IS NOT NULL) THEN
display_order + 0
ELSE
`VALUE`
END
但这似乎没有帮助
列数据类型为tinyint(2),无符号,允许为display\u order
编辑
下面是描述数据元素值的
Field Type Null Key Default Extra
id int(11) NO PRI (null) auto_increment
key_id int(11) NO MUL (null)
value varchar(50) NO (null)
sub_title varchar(125) YES (null)
chart_color char(7) YES (null)
display_order tinyint(2) unsigned YES (null)
我能做些什么来纠正这个问题吗?如以下所述:
表达式的返回类型是所有返回值的兼容聚合类型,但也取决于使用它的上下文。如果在字符串上下文中使用,结果将作为字符串返回。如果在数值上下文中使用,结果将以十进制、实数或整数值的形式返回
由于值
列是字符串类型,因此必须单独转换值
列,或者转换整个大小写
表达式,才能获得所需的结果。在这种情况下,也比案例
更简洁:
SELECT
id,
display_order
FROM
data_element_value
WHERE
key_id = 32
ORDER BY
COALESCE(display_order, CAST(`value` AS UNSIGNED))
您可以使用一个简单的orderby
,而不使用case
或coalesce
语句,这样就可以正常工作
SELECT
id,
display_order
FROM
data_element_value
WHERE
key_id = 32
ORDER BY `display_order`, `value`
描述数据元素值的输出是什么?你能给出你的表格示例吗?用同样的方法测试一个解决方案会很有趣rows@cegfault我添加了describeupdate——这就像一种魅力(某种程度上)。它不是在value
列上排序,而是在display\u order列上排序。@GreenChili:对于那些display\u order为NULL的记录,应该使用value
。。。那不是你想要的吗?您的意思是先按显示顺序
排序,然后在具有匹配的显示顺序
的记录中,按值
排序吗?如果是这样,您只需要按显示顺序排序,`value`
。不一定先按显示顺序排序,然后按值排序。如果display\u order不为null,我希望按display\u order排序,如果display\u order为null,则按value(可以是任何字符串值)排序。看看WonderCricket的回复,现在看看你的评论。看起来只需一个简单的“按显示顺序,值”就可以了。@GreenChili:假设您有以下(显示id,值)
记录-(1,1)、(1,3)、(2,1)、(NULL,2)
;它们应该以什么顺序返回?如果我有以下(id,显示顺序,值)记录-(1,1,'b'),(2,2,'a'),(3,null,'b'),(4,null,'a')。它将返回(通过id):1、2、4、3您正在对OP的预期业务逻辑进行假设,这在问题中没有给出。然而,考虑到这一点,这可能确实是人们实际寻求的。