gpt4 book ai didi

php - 在 SQL Select 中正确排序小数数据

转载 作者:行者123 更新时间:2023-11-29 03:04:47 26 4
gpt4 key购买 nike

我的数据库列是 varchar(25) 数据类型,其值 1 1/2"、1/2"、3"和 4"代表消防站的软管直径。我遇到的问题是,当我想按升序排序时,以下代码会按上述顺序在数据库中吐出软管直径,这意味着我想要“1/2、1 1/2、3、4”而不是前面的 1 1/2。有没有办法在 SQL 中为我的 varchar 数据类型执行此操作?

// Select hose locations from fire database
$query = "SELECT hose_diameter FROM hose_diameter ORDER BY hose_diameter";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);

//FETCH ROWS
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
print "<option value=\"".$row['hose_diameter']."\">".$row['hose_diameter']."</option>";
}
}

最佳答案

这是一种方法。它只是摆脱了第一个排序的“1/2”,然后将其添加回去:

order by replace(diam, '1/2', ''), diam

当然,这并不能很容易地推广到其他分数。

另一种方法是在'/'之前的一个字符开始时在前面添加一个'0':

order by (case when diam like '_/%' then '0'+diam else diam end)

最后,您可以使用一个数字形式的直径查找表:

SELECT hd.hose_diameter
FROM hose_diameter hd left outer join
(select '1/2' as hose_diameter, 0.5 as units union all
select '1 1/2', 1.5 union all
select '3', 3 union all
select '4', 4
)diams
on hd.hose_diameter = diams.hose_diameter
ORDER BY diams.units;

其实我更喜欢这种方式,因为意图很明确。

编辑:

我不明白评论。我刚刚测试了这段代码:

with hose_diameter as (
select '1/2' as diam union all
select '1 1/2' union all
select '3'
)
SELECT hd.diam
FROM hose_diameter hd left outer join
(select '1/2' as hose_diameter, 0.5 as units union all
select '1 1/2', 1.5 union all
select '3', 3 union all
select '4', 4
) diams
on hd.diam = diams.hose_diameter
ORDER BY diams.units;

它返回:

1/2
1 1/2
3

我测试了第一个版本,它返回相同的顺序。还有第二个版本。

关于php - 在 SQL Select 中正确排序小数数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com