2016-05-31 92 views
0

我的一些列在末尾有後綴_a
我想檢查,如果列有這樣的後綴,如果是這樣,只是從我的結果集中刪除它。從列名稱中刪除後綴

這是我的查詢:

SELECT t1.column_name FROM information_schema.Columns t1 
WHERE t1.table_name = 'myTab1' AND t1.table_schema = 'myDatabase1' 

我需要添加類似:

IF(SUBSTR(column_name, -2) == "_a", SUBSTR("column_name", 0, -2)) 

這樣col_a變得col

我需要保留後綴,所以我不能完全重命名我的列名。

+2

你想要做什麼?我不明白你的問題:首先你說:_如果列有這樣一個後綴,如果是這樣,只是刪除它。在你的文章結尾處說:_so我不能只重命名我的列名__ – vaso123

+0

@lolka_bolka:I想要刪除結果集中的後綴,但我不想重命名列。 – user1170330

+1

你想刪除代碼中的後綴,但保留在數據庫端?如果我正確地理解了這一點,那麼這正是別名所用的(即'select t1.column_name_a as column_name') – user2366842

回答

2

\是爲了逃避特殊字符_

SELECT case when t1.column_name like '%\_a' then SUBSTRING(t1.column_name, 1, length(t1.column_name)-2) 
      when t1.column_name like '%|a' then SUBSTRING(t1.column_name, 1, length(t1.column_name)-2) 
     else t1.column_name end 
FROM information_schema.Columns t1 
WHERE t1.table_name = 'myTab1' AND t1.table_schema = 'myDatabase1' 

基礎上的評論,如果被搜索的字符串模式爲應該包含|a使用t1.column_name like '%|a'

Sample fiddle

+0

謝謝。如果我有另一個後綴,比如'| a',怎麼辦?只用'|'改變'_'不起作用。 – user1170330

+1

在這種情況下,您不需要\ \是爲了逃避特殊字符'_',這意味着「任何1個字符」 – xQbert

+0

@ user1170330 ..'\\'是爲了轉義特殊字符'_'。 |不是一個特殊的角色。所以你可以在這種情況下使用'like'| a'。 –

-1

略少動(但更易讀)的解決辦法是這樣的:

Select t1.column_name_a as column_name, t1.column_name2_a as t1.column_name2 
from information_schema.Columns t1 
where t1.table_name = 'myTab1' and t1.table_schema = 'myDatabase1' 

如果您確實需要動態的東西,請使用其他建議答案。如果你的專欄名稱要一致,那麼這可能是我個人看到的更爲標準的做法。