假设数据库表中的列包含混合类型值,例如:它包含数字,字符串, NULL 或为空
柱
97
2
19
NULL
81
TS
45
如何按升序对列进行排序,首先是数字,然后按字典顺序排列字符串,然后是空值和空值?
描述更新:
(根据@ GolezTrol以下评论)
列的类型是' varchar' (例如" 1"," 10"," 4"," D","")。默认排序程序(asc)以字面顺序排序(" 1"," 10"," 4"," D"),我会喜欢他们先用数字排序,然后用其他数值进行排序。
答案 0 :(得分:2)
如果列类型为varchar,则默认情况下排序顺序将基于第一个ascii值。如果第一个字符相同,则第二个字符相同,依此类推。因此,您的方案的顺序将是(使用ascii值)
如果您确定自己的数据没有特殊字符,那么您可以使用' {' (125)空值和'}' (127)然后尝试排序。查询将取决于您的数据库,但这可能是一个起点。
答案 1 :(得分:0)
嗯,下面的代码不是一个解决方案,但根据db中选择的场景和数据(最大长度为2),它可以解决问题。
select TH from LEDGER
where TH<>''
group by th
order by
case ISNUMERIC(TH)
when 1 then cast(th as int)
else ascii(substring(upper(th), 1, 1))-14
end;
我想找到更通用的解决方案并适用于任何场景。欢迎提出任何建议。