2013-09-22 30 views
1

我有一個包含這樣的值,例如柱:返回字符串基於字符串內的值,但不截斷

Farari - 製造2013

梅賽德斯 - 製造2012

捷豹 - 製造1978年

我想回到最高或最近一年化妝車:

像這樣的事情都會給我一年,但明顯ly會截斷其餘的字符串:

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

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

在這種情況下:Farari - 製造2013

回答

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

你應該合理規範化表。我的推理模式將添加一年的列併爲其添加索引,以便它具有出色的查詢性能。

+0

非常真實的,這就是我想要做的,是哈結果如下: – Asynchronous

+0

關於thins查詢的最好的事情是它處理'tie'。這將檢索具有最新年份的所有記錄。 –

+0

感謝您付出的巨大努力,特別是與小提琴。 – Asynchronous

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

的Sql下面以供參考:

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

你好:Sunyen,這是TSQL還是MySQL? – Asynchronous

+0

這是oracle。 – sunysen

0

,當你把它打印出來,而不是存儲在數據庫中,你應該得到的 '在製造'。因此,而不是你的表是:

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;?> 

它會使你的表更加緊湊和友好