我有一列包含这样的值,例如:
法拉里 - 2013 年制造
梅赛德斯 - 2012 年制造
捷豹 - 1978 年制造
我想退回制造年份最高或最近的汽车:
像这样的东西会给我一年,但显然会截断字符串的其余部分:
SELECT
MAX(RIGHT(CarProfile, 4))
FROM mySchema.Car;
我如何获得最高年份但保持完整的字符串?
在这种情况下:Farari - 2013 年制造
我有一列包含这样的值,例如:
法拉里 - 2013 年制造
梅赛德斯 - 2012 年制造
捷豹 - 1978 年制造
我想退回制造年份最高或最近的汽车:
像这样的东西会给我一年,但显然会截断字符串的其余部分:
SELECT
MAX(RIGHT(CarProfile, 4))
FROM mySchema.Car;
我如何获得最高年份但保持完整的字符串?
在这种情况下:Farari - 2013 年制造
SELECT top 1 *
FROM Car order by RIGHT(CarProfile, 4)*1 desc
SELECT *
FROM Car
WHERE RIGHT(CarProfile, 4) =
(SELECT MAX(RIGHT(CarProfile, 4))
FROM Car)
您应该正确规范您的表格。我建议的架构将添加一列一年并对其进行索引,以便它具有出色的查询性能。
下面的Sql供参考:
select CarProfile
from FROM mySchema.Car
where substr(CarProfile, CarProfile.length - 4, CarProfile.length) =
SELECT MAX(RIGHT(CarProfile, 4)) FROM mySchema.Car;
当您打印出来时,您应该得到“制造”,而不是存储在数据库中。因此,您的表格将是:
CarProfile | Year
---------------
Ferrari | 2013
Mercedes | 2012
Jaguar | 1978
您的“制造”将通过如下查询检索:
SELECT CarProfile, ' - made in', year
FROM Car
HAVING year = MAX(year)
或者您可以在显示时编写它(例如php):
<?php echo $CarProfile . " - made in " $year;?>
它将使您的桌子更加紧凑和友好