根据字符串中的值返回字符串而不截断

时间:2013-09-22 08:00:31

标签: sql sql-server tsql

我有一个包含这样的值的列,例如:

法拉利 - 2013年制造

梅赛德斯 - 2012年制造

Jaguar - 1978年制造

我希望将车辆带回最高或最近的制造年份:

像这样的东西会给我一年,但显然会截断字符串的其余部分:

SELECT
MAX(RIGHT(CarProfile, 4)) 
FROM mySchema.Car;

如何获得最高年份但保持完整的字符串?

在这种情况下:法拉利 - 2013年制造

4 个答案:

答案 0 :(得分:2)

SELECT  top 1 *
FROM    Car order by RIGHT(CarProfile, 4)*1 desc 

答案 1 :(得分:1)

SELECT  *
FROM    Car
WHERE   RIGHT(CarProfile, 4) =
        (SELECT MAX(RIGHT(CarProfile, 4)) 
        FROM Car)

你应该正确地规范你的桌子。我的ssugested架构将添加一年的列并对其进行索引,以便它具有很好的查询性能。

答案 2 :(得分:0)

以下Sql供参考:

select CarProfile
  from FROM mySchema.Car
 where substr(CarProfile, CarProfile.length - 4, CarProfile.length) =
        SELECT MAX(RIGHT(CarProfile, 4)) FROM mySchema.Car;

答案 3 :(得分:0)

当你打印出来时,你应该得到'make in',而不是存储在数据库中。所以相反,你的表将是:

CarProfile | Year
---------------
Ferrari | 2013
Mercedes | 2012
Jaguar | 1978

您的'make in'将通过查询检索,如下所示:

SELECT  CarProfile, ' - made in', year
FROM    Car
HAVING  year = MAX(year) 

或者你可以在它显示时编写它(例如php):

<?php echo $CarProfile . " - made in " $year;?>

它将使您的桌子更加紧凑和友好