从列名中删除后缀

时间:2016-05-31 12:52:33

标签: mysql sql

我的一些列末尾有_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 个答案:

答案 0 :(得分: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

答案 1 :(得分:-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'

如果您真的需要动态的东西,请使用其他建议的答案之一。如果你的专栏名称是一致的,这可能是我个人见过的更标准的做法。