2008-12-03 192 views
2

我選擇具有濫用狀態列的舊數據庫上的數據。狀態列中有多條信息。值如'新聯繫YYYY','OnlineYYYY','YYYYYYYY','撤回YYYY'等。正如您可能已經猜到的,YYYY代表了我需要的那一年......我如何擺脫..替換(替換(替換(替換(替換(...?

過去我已經做了類似的事情,以

Rtrim(ltrim(Replace(Replace(Replace(Replace(Replace(… 

基本上,替換爲空字符串的所有文本值,因此仍然存在的唯一的事情就是一年。我依然可以做到這一點,但我想這是荒謬的,而且有一個更好的方法。

有沒有人知道更好的方法來做到這一點?

回答

5

如果您只是想從字符串中提取一個四位數年份,您可以使用PATINDEX

SELECT SUBSTRING(FieldName, PATINDEX('%[0-9][0-9][0-9][0-9]%', FieldName), 4) 
FROM TableName 
+0

就是這樣。謝謝。 – 2008-12-03 23:30:10

+0

不錯! PATINDEX對我來說是新的,另一天學習新的東西! ;) – Stefan 2008-12-03 23:49:11

+0

當我看到用於過濾記錄的函數時,我不寒而慄,因爲它們效率太低。如果要單獨使用,應該修改架構以分別存儲年份。對於小型數據庫來說,這種事情是可以的,但是我們在真正巨大的大型機數據庫上工作,因爲這會成爲嘲笑的理由。 – paxdiablo 2008-12-04 02:12:26

1

如果今年百達是最後4:

SELECT right(FieldName,4) from table 
1

所有給定的解決答案你的問題,但正確的答案是更好地規範你的數據庫。如果您需要將年份作爲單獨項目存儲,則應將其存儲在單獨的列中。

其他任何東西都只是去掉疣中的毛髮,就像我親愛的老奶奶曾經說過的那樣(她從來沒有這樣說過,我只是想到了它,聽起來有點酷 - 一定是我爲什麼不出去很多:-)。