猿问

为什么在编码中数据输入“O-11”小于数据输入“O-6”?

我目前正在用 PHP 编写单元管理系统。我有以下代码:


<?php

   $result = mysqli_query($conn, "SELECT * FROM ranks WHERE grade_level <= "O-6" ORDER BY id ASC");

      while($row = mysqli_fetch_array($result)) {

         echo "<option value='".$row['id']."'>".$row['rank_name']."</option>";

      }

?>

我希望它只显示低于/包括上校 (O-6) 的军衔,但它也显示军衔将军 (O-10) 和陆军将军 (O-11)。我不知道为什么第二个数字没有注册,因此它的价值超过了个位数。


对于谷歌的搜索算法,我的问题似乎也太宽泛了。


拉莫斯之舞
浏览 175回答 2
2回答

慕虎7371278

您可以使用 MySQL 的SUBSTRING_INDEX函数来提取列的数字部分grade_level(在 的右侧-)并对其进行测试:SELECT&nbsp;*&nbsp;FROM&nbsp;ranks&nbsp;WHERE&nbsp;SUBSTRING_INDEX(grade_level,&nbsp;'-',&nbsp;-1)&nbsp;<=&nbsp;6dbfiddle 上的演示

狐的传说

如果要比较字符串右侧的整数值,并且字符串始终以 2 字符为前缀O-假设您使用的是 Sql-ServerSELECT * FROM ranks&nbsp;WHERE cast(right(grade_level, len(grade_level) -2) AS INT)&nbsp; <=&nbsp;&nbsp;&nbsp; cast(right("O-6", len("O-6") -2) as INT)&nbsp;&nbsp;ORDER BY id ASC
随时随地看视频慕课网APP
我要回答