MARIADB COLUMN명 CAMELCASE 질문입니다. 0 3 3,530

by 후인구 [2021.02.03 23:30:16]


FIRST_REG_DT  -> firstRegDt

FIRST_REG_ID -> firstRegId

LAST_MOD_DT  -> lastModDt

LAST_MOD_ID -> lastModId

 

TABLE COLUMN_NAME을 CAMEL CASE로 변경하려고 합니다. 

ORACLE에서는 INITCAP함수가 지원되어서 CAMELCASE로 용이합니다

MARIADB에서는 INITCAP함수가 지원이 되지 않습니다.

MARIADB 에서는 어떻게 쿼리로 구현해야 되나요?

'

select column_name 

from information_schema.columns where table_name = '테이블명'

by pajama [2021.02.04 00:16:55]

mariadb에는 initcap과 유사한 기능의 함수가 없어서 직접 만드셔서 사용하셔야합니다.

쿼리만으로는 어렵지 않을까요..

아래 링크에 있는걸 써봤는데 잘 동작하네요. 사용하신다면 테스트는 충분히 해보시고..

https://stackoverflow.com/questions/12364086/how-can-i-achieve-initcap-functionality-in-mysql

 

MariaDB [test]> select substr(replace(initcap(concat('1',replace('FIRST_REG_DT','_',' '))),' ',''),2) initcap;
+------------+
| initcap    |
+------------+
| firstRegDt |
+------------+

 


by 후인구 [2021.02.04 02:35:05]

function 안쓰고는 방법이 없는건가요?

regexp_replace 정규식 함수를 사용해서요


by 마농 [2021.02.04 09:55:23]
-- MariaDB 10.4 --
SELECT table_schema
     , table_name
     , column_name
     , ordinal_position
     , GROUP_CONCAT(
       CASE WHEN SUBSTR(column_name, seq - 1, 1) = '_'
            THEN UPPER(SUBSTR(column_name, seq, 1))
            ELSE LOWER(SUBSTR(column_name, seq, 1))
        END
       ORDER BY seq SEPARATOR '') column_name_new
  FROM information_schema.columns
 INNER JOIN seq_1_to_40
    ON seq <= LENGTH(column_name)
 WHERE table_schema = 'test'
   AND table_name   = 'test'
   AND SUBSTR(column_name, seq, 1) != '_'
 GROUP BY table_schema
     , table_name
     , column_name
     , ordinal_position
;
-- Oracle --
SELECT table_name
     , column_name
     , column_id
     , REPLACE(SUBSTR(INITCAP('a' || column_name), 2), '_') column_name_new
  FROM user_tab_columns
 WHERE table_name = 'TEST'
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입