我有一个postgres专栏,内容如下:
只有数字或空字符串。
我希望能够按数字对数字进行排序,但当我将列强制转换为浮点型时,它会给予我以下错误:
ERROR: invalid input syntax for type double precision: ""
有没有一种方法可以进行这种排序,并将空字符串视为0?
这是我的查询失败:
SELECT C.content
FROM row R
LEFT JOIN cell C ON C.row_id = R.row_id
WHERE R.database_id = 'd1c39d3a-0205-4ee3-b0e3-89eda54c8ad2'
AND C.column_id = '57833374-8b2f-43f3-bdf5-369efcfedeed'
ORDER BY cast(C.content as float)
2条答案
按热度按时间jk9hmnmh1#
当它是一个空字符串时,您需要将其视为null或0,然后它才能工作,请尝试按以下顺序放置case语句
0mkxixxg2#
如果确定该列永远不会有负值,一个简单的选择就是添加前导零。
如果列为
NULL
或包含空字符串,则按0排序。否则,值将按原样排序,因为添加前导零不会更改任何内容。
如果可能出现负值,则会失败,因此我将使用
CASE WHEN
。但是我建议
NULL
值也取0,不仅仅是空字符串:否则,
NULL
值将被排序为最高数字,这可能不是预期的。是的,我知道你写了只有数字和空字符串在你的表中,但也许这可以改变(除非列是不可空的),所以添加这个条件没有坏处。