SQL
2009.12.31 10:21

MySQL / Split String

조회 수 42049 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

MySQL 함수 만들어서 사용하기

CREATE FUNCTION SPLIT_STRING(
  x text,
  delim varchar(32),
  pos int
)
RETURNS text
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');


CREATE FUNCTION SPLIT_STRING( x text, delim varchar(32), pos int )
RETURNS text
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(x, delim, pos), delim, -1);


SELECT SPLIT_STRING(string, delim, N);

mysql>  SELECT SPLIT_STRING('1|2|c|', '|', 1);
+--------------------------------+
| SPLIT_STRING('1|2|c|', '|', 1) |
+--------------------------------+
| 1                              |
+--------------------------------+
1 row in set (0.00 sec)



참고하기

mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a|bb|ccc|dd', '|', 3), '|', -1);
+------------------------------------------------------------------+
| SUBSTRING_INDEX(SUBSTRING_INDEX('a|bb|ccc|dd', '|', 3), '|', -1) |
+------------------------------------------------------------------+
| ccc                                                              |
+------------------------------------------------------------------+
1 row in set (0.00 sec)


mysql> SELECT 'a|bb|cc|dd' RLIKE '((\\|).*){3}';
+-----------------------------------+
| 'a|bb|cc|dd' RLIKE '((\\|).*){3}' |
+-----------------------------------+
|                                 1 |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> SELECT 'a|bb|cc|dd' RLIKE '((\\|).*){4}';
+-----------------------------------+
| 'a|bb|cc|dd' RLIKE '((\\|).*){4}' |
+-----------------------------------+
|                                 0 |
+-----------------------------------+
1 row in set (0.00 sec)



SUBSTRING_INDEX(str,delim,count)

Returns the substring from string str before count occurrences of the delimiter delim. If count is positive, everything to the left of the final delimiter (counting from the left) is returned. If count is negative, everything to the right of the final delimiter (counting from the right) is returned. SUBSTRING_INDEX() performs a case-sensitive match when searching for delim.

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'


Thanks to http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

TAG •

SQL
2009.04.08 17:48

MySQL / mysqldump

조회 수 26042 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

mysqldump 옵션 중에 알아 두면 좋은 것 몇가지 적어본다.

--complete-insert
  : insert into table1(a, b, c) values(v1, v2, v3) 형식으로 dump함.
  : 해당 옵션을 주지 않으면 필드명이 나오지 않으므로 호환성을 생각한다면, 이 옵션을 부여하여 dump해야 함.
--skip-extended-insert
  : extended insert 를 지원하지 않는 하위 버전의 MySQL 서버에 복원하고 싶을 때 사용함
--default-character-set
  : 기본 db 캐릭터셋을 지정함.


Example)
# mysqldump --complete-insert --skip-extended-insert --default-character-set=euckr -u사용자명 -p DB명 > dump.sql

TAG •

SQL
2008.03.05 12:10

MySQL / ALTER TABLE Syntax

조회 수 25531 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

Syntax
ALTER [IGNORE] TABLE tbl_name
    alter_specification [, alter_specification] ...

alter_specification:
    table_option ...
  | ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]
  | ADD [COLUMN] (col_name column_definition,...)
  | ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        PRIMARY KEY [index_type] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)
  | ADD [FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        FOREIGN KEY [index_name] (index_col_name,...)
        reference_definition
  | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST|AFTER col_name]
  | MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
  | DROP [COLUMN] col_name
  | DROP PRIMARY KEY
  | DROP {INDEX|KEY} index_name
  | DROP FOREIGN KEY fk_symbol
  | DISABLE KEYS
  | ENABLE KEYS
  | RENAME [TO] new_tbl_name
  | ORDER BY col_name [, col_name] ...
  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
  | [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
  | DISCARD TABLESPACE
  | IMPORT TABLESPACE

index_col_name:
    col_name [(length)] [ASC | DESC]

index_type:
    USING {BTREE | HASH | RTREE}

 Example
  1. ALTER TABLE t1 ENGINE = InnoDB;   # 테이블 t1의 DB 엔진을 InnoDB로 변경
  2. ALTER TABLE t2 AUTO_INCREMENT = value;  # t2 테이블의 자동증가 숫자를 value로 변경
  3. ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;  # t2 테이블의 c, d 칼럼을 삭제함.
  4. ALTER TABLE t1 CHANGE a b INTEGER;  # t1 테이블의 칼럼 a를 이름을 b로 타입을 INTEGER로 변경.
  5. ALTER TABLE t1 MODIFY b BIGINT NOT NULL; # t1 테이블의 칼럼 b의 타입 변경
  6. ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
  7. ALTER TABLE t1 CHARSET = euckr ; # 테이블 t1의 character-set을 euckr로 변경




TAG •

SQL
2007.12.04 10:01

mysql / CREATE TABLE

조회 수 37498 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
MySQL 에서 테이블을 생성하는 CREATE TABLE 문에 대해서 알아보자.

CREATE [TEMPRORARY] TABLE [IF NOT EXISTS] 테이블명
  [(생성_정의,...)] [테이블_옵션] [select_문]

생성_정의(create_definition):

col_name column_definition | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) | {INDEX|KEY} [index_name] [index_type] (index_col_name,...) | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...) | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition | CHECK (expr)


칼럼_정의(column_definition)

data_type [NOT NULL | NULL] [DEFAULT default_value]

      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]

      [COMMENT 'string'] [reference_definition]

데이터 타입 (data_type)

    BIT[(length)]

  | TINYINT[(length)] [UNSIGNED] [ZEROFILL]

  | SMALLINT[(length)] [UNSIGNED] [ZEROFILL]

  | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]

  | INT[(length)] [UNSIGNED] [ZEROFILL]

  | INTEGER[(length)] [UNSIGNED] [ZEROFILL]

  | BIGINT[(length)] [UNSIGNED] [ZEROFILL]

  | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]

  | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]

  | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]

  | DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]

  | NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]

  | DATE

  | TIME

  | TIMESTAMP

  | DATETIME

  | YEAR

  | CHAR(length)

      [CHARACTER SET charset_name] [COLLATE collation_name]

  | VARCHAR(length)

      [CHARACTER SET charset_name] [COLLATE collation_name]

  | BINARY(length)

  | VARBINARY(length)

  | TINYBLOB

  | BLOB

  | MEDIUMBLOB

  | LONGBLOB

  | TINYTEXT [BINARY]

      [CHARACTER SET charset_name] [COLLATE collation_name]

  | TEXT [BINARY]

      [CHARACTER SET charset_name] [COLLATE collation_name]

  | MEDIUMTEXT [BINARY]

      [CHARACTER SET charset_name] [COLLATE collation_name]

  | LONGTEXT [BINARY]

      [CHARACTER SET charset_name] [COLLATE collation_name]

  | ENUM(value1,value2,value3,...)

      [CHARACTER SET charset_name] [COLLATE collation_name]

  | SET(value1,value2,value3,...)

      [CHARACTER SET charset_name] [COLLATE collation_name]

  | spatial_type


인덱스_칼럼_이름 (index_col_name):
    col_name [(length)] [ASC | DESC]

인덱스_타입 (index_type):
     USING {BTREE | HASH | RTREE}

참조_정의 (reference_definition):

    REFERENCES tbl_name [(index_col_name,...)]

      [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]

      [ON DELETE reference_option]

      [ON UPDATE reference_option]

참조_옵션 (reference_option):
    RESTRICT | CASCADE | SET NULL | NO ACTION

테이블_옵션 (table_option):

    {ENGINE|TYPE} [=] engine_name

  | AUTO_INCREMENT [=] value

  | AVG_ROW_LENGTH [=] value

  | [DEFAULT] CHARACTER SET charset_name

  | CHECKSUM [=] {0 | 1}

  | COLLATE collation_name

  | COMMENT [=] 'string'

  | CONNECTION [=] 'connect_string'

  | DATA DIRECTORY [=] 'absolute path to directory'

  | DELAY_KEY_WRITE [=] {0 | 1}

  | INDEX DIRECTORY [=] 'absolute path to directory'

  | INSERT_METHOD [=] { NO | FIRST | LAST }

  | MAX_ROWS [=] value

  | MIN_ROWS [=] value

  | PACK_KEYS [=] {0 | 1 | DEFAULT}

  | PASSWORD [=] 'string'

  | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}

  | UNION [=] (tbl_name[,tbl_name]...)

select_문 (select_statement)

    [IGNORE | REPLACE] [AS] SELECT ...   (Some legal select statement)




참조: http://www.mysql.com
TAG •

Board Pagination Prev 1 Next
/ 1