使用字串資料
當使用字串資料時,可以使用下面的字元資料型別。
char
固定長度、不足部分使用空格填充的字串。
varchar
變長字串。
text(mysql和sql server)或clob(character large object;oracle database)
容納大長度的邊長字串(通常在上下文中指代文字)。mysql具有多種text型別(tinytext、text、mediumtext和longtext),最多可儲存4gb大小的文件資料。
建立下表用於演示:
create table string_tbl
char_fld char(30),
vchar_fld varchar(30),
text_fld text
生成字串
生成字串資料的最簡單方式是使用一對單引號將字串包含起來:
insert into string_tbl (char_fld, vchar_fld, text_fld)
values ('this is char data', 'this is varchar data', 'this is text data');
通過select @@session.sql_mode;
命令可以檢視mysql命令的模式。
結果如下:
mysql> select @@session.sql_mode;
| @@session.sql_mode |
| strict_trans_tables,no_auto_create_user,no_engine_substitution |
1 row in set (0.00 sec)
在mysql中,預設行為是「strict」模式,即在發生問題時丟擲異常,而在早先的伺服器版本中,預設方式是階段字串並發出乙個警告。如果希望資料庫引擎採取後一種方式,可以將之修改為ansi模式:
set sql_mode='ansi';
通過show warnings;
來檢視警告。
處理字串中包含單引號的情況
如果要插入的字串中包含單引號,可以:
通過在單引號前再新增乙個單引號作為轉義符
或選擇反斜槓作為單引號的轉義字元
mysql> update string_tbl
-> set text_fld = 'this string disn''t work, but it does now';
query ok, 1 row affected (0.14 sec)
rows matched: 1 changed: 1 warnings: 0
mysql> update string_tbl
-> set text_fld = 'this string disn\'t work, but it does now';
query ok, 0 rows affected (0.13 sec)
rows matched: 1 changed: 0 warnings: 0
使用內建函式 quote() ,可以將整個字串包含起來,並為字串本身的單引號/撇號增加轉義符。例:
select quote(text_fld) from string_tbl;
結果:mysql> select quote(text_fld) from string_tbl;
| quote(text_fld) |
| 'this string disn\'t work, but it does now' |
1 row in set (0.00 sec)
包含特殊字元
內建函式 char() 可用於從ascii字符集中255個字元中任意構建字串:
select char(128,129,130,131,132,133,134,135,136,137);
結果:mysql> select char(128,129,130,131,132,133,134,135,136,137);
| char(128,129,130,131,132,133,134,135,136,137) |
| 亗儎厗噲 |
1 row in set (0.00 sec)
concat() 函式用於連線字串:
mysql> select concat('zifeiy haha ', char(148), 'n');
| concat('zifeiy haha ', char(148), 'n') |
| zifeiy haha 攏 |
1 row in set (0.00 sec)
ascii() 函式接受乙個字元並返回其序號:
mysql> select ascii('a');
| ascii('a') |
| 97 |
1 row in set (0.05 sec)
操作字串
length()函式:返回字串的字元數
select length(char_fld) char_length,
length(vchar_fld) varchar_length,
length(text_fld)text_length
from string_tbl;
position()函式:查詢字串中子字串的位置
select position('zifeiy' in vchar_fld)
from string_tbl;
locate()函式:從指定位置開始搜尋字串中的子字串
select locate('zifeiy', vchar_fld, 5)
from string_tbl;
strcmp()函式:字串比較函式
該函式接受兩個字串作為引數,並返回下面的結果之一:
-1,第乙個字串字典序小於第二個字串字典序
0,兩個字串相等
1,第乙個字串字典序大於第二個字串
select strcmp('12345', '12345') 12345_12345,
strcmp('abcd', 'xyz') abcd_xyz,
strcmp('abcd', 'qrstuv') abcd_qrstuv,
strcmp('qrstuv', 'qrstuv') qrstuv_qrstuv,
strcmp('12345', 'xyz') 12345_xyz,
strcmp('xyz', 'qrstuv') xyz_qrstuv;
結果:| 12345_12345 | abcd_xyz | abcd_qrstuv | qrstuv_qrstuv | 12345_xyz | xyz_qrstuv |
| 0 | -1 | -1 | 0 | -1 | 1 |
除了strcmp()函式,mysql還可以在select語句中使用like和regexp操作符來比較字串
select name, name like '%ns' end_in_ns
from department;
select cust_id, cust_type_cd, fed_id,
fed_id regexp '.-.-.' is_ss_no_format
from customer;
concat()函式的用法示例:
update string_tbl
set text_fld = concat(text_fld, ', now longer');
select concat(fname, ' ', lname) from employee;
insert()函式 ,它接受4個引數:原始字串、字串操作的開始位置、需要替換的字串以及替換字串。根據第三個值,函式可以選擇插入或替換原始字串中的字元。如果該引數值為0,那麼替換字串將會被插入其中,並且剩餘的字元將會向右排放。
select insert('zifeiy hello', 9, 0, 'haha');
substring()函式 從指定位置開始提取指定數目的字元:
select substring('goodbye zifeiy world', 9, 6);
linux中 中括號 中的判斷引數
源自 http www.diybl.com course 6 system linux linuxjs 20081117 151774.html b file 若檔案存在且是乙個塊特殊檔案,則為真 c file 若檔案存在且是乙個字元特殊檔案,則為真 d file 若檔案存在且是乙個目錄,則為真 e...
從HIVE中中查詢
從hive資料庫查詢文件 by ymd 拼接sql語句 string sql select from doc file where contains name wildcard 拼接名稱查詢語句 if stringutils.isnoneempty unstructuredbean.getname ...
Spring中classpath中萬用字元號的使用
說明 無萬用字元,必須完全匹配 classpath user base beans.xml 說明 匹配零個或多個字串 只針對名稱,不匹配目錄分隔符等 例如 user a base beans.xml user b base beans.xml 但是不匹配 user base beans.xml cl...