db2字符串函数
db2字符串函数
DB2⼀个汉字占3个字节,Oracle占两个字节。
Oracle:
SQL> select lengthb('中') from dual;
LENGTHB('中')
-------------
2
DB2:
db2 => values length('中')
1
-----------
3
1、Locate函数
语法:LOCATE(ARG1,ARG2,) LOCATE函数在ARG2中查找ARG1第⼀次出现的位置,如果指定POS,则从ARG2的POS处开始查找ARG1第⼀次出现的位置。
db2:
LOCATE 函数返回⼀个字符串在另⼀个字符串中第⼀次出现的起始位置。如果指定了可选的起始位置,则表明它是源字符串中开始进⾏搜索的字符位置。可以指定⼀个可选的字符串长度
单元来指明在哪些单元中表⽰函数的起始位置
和结果。可以使⽤基于字符的函数来解决在 LOCATE 函数中指定起始位置的问题。locate(String param1,String param2,int param3) 从param2的第param3位置开始,返回param1第⼀次出现的位置,默认param2为1。
db2 => values locate('a','abca',3,codeunits16)
1
-----------
4
1 条记录已选择。
POSITION 函数返回⼀个字符串在另⼀个字符串中第⼀次出现的起始位置。使⽤基于字符的函数可以解决将字节位置返回为字符位置的问题。
经测试,代码单元⽤octets也可以得到正确结果。db2 => values position('中','abc1中',codeunits16)
1
-----------
5
1 条记录已选择。
Oracle:
INSTR(源字符串, ⽬标字符串, 起始位置, 匹配序号)
INSTR在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索⼀次,就是说从字符的开始到字符的结尾就结束。
语法如下:instr( string1, string2 [, start_position [, nth_appearance ] ] )
参数分析:string1
源字符串,要在此字符串中查找。string2
要在string1中查找的字符串.start_position
代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在
源字符串中的开始索引。nth_appearance
代表要查找第⼏次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。
注意:
如果String2在String1中没有找到,instr函数返回0.SQL> select instr('中q1abc','a',1) from dual;
INSTR('中Q1ABC','A',1)
----------------------
4
2、字符分解 substr
db2按字节数算,当遇到多字节字符时,会得出意想不到的结果。substr( string, start_position, [ length ] )
db2 => values substr('中abc',1,1)
1
-
substring(string,start_position,length,代码单元):
返回字符串的⼦字符串,⼦字符串是输⼊字符串的零个或多个相邻字符串长度单元。codeunits16和codeunits32代码单元按字符个数算。db2 => values substring('中avbc',1,1,codeunits16)
1
-------
中
Oracle中按字符数算,截取指定起始位置的字符串。substr( string, start_position, [ length ] )
SQL> select substr('中abc',1,1) from dual;
SU
--中
3、字符串长度单元 length
DB2:
使⽤ OCTETS 作为字符串长度单元时,通过简单地计算字符串的字节数即可确定字符串的长度。CODEUNITS16 指定将 Unicode UTF-16 ⽤于字符语义。同样,CODEUNITS32 指定使
⽤ Unicode UTF-32 来理解多字节字符的字符边界。
使⽤ CODEUNITS16 或 CODEUNITS32 计算代码单元得到的结果是相同的,除⾮使⽤了增补字符和代理对。使⽤增补字符时,对于⼀个增补字符,使⽤ CODEUNITS16 计算是两个UTF-16 代码单元,⽽使⽤ CODEUNITS32 计算则是⼀个 UTF-32 代码单元。
如果使⽤ CODEUNITS 来获取字符的长度,则⽤作字符串函数输⼊的 CODEUNITS 的不同会导致输出的不同。db2 => values CHARACTER_LENGTH('中',octets)
1
-----------
3
1 条记录已选择。
db2 => values CHARACTER_LENGTH('中',codeunits16)
1
-----------
1
1 条记录已选择。
db2 => values CHARACTER_LENGTH('中',codeunits32)
1
-----------
1
1 条记录已选择。
Oracle:
length按字符数算;lengthb按字节数算。
SQL> select length('中'),lengthb('中') from dual;
LENGTH('中') LENGTHB('中')
------------ -------------
1 2
4、去空格函数
LTRIM() 把字符串头部的空格去掉;
RTRIM() 把字符串尾部的空格去掉;
TRIM() 把字符串头和尾部的空格去掉。
5、⼤⼩写转换函数
LOWER()将字符串全部转为⼩写;
UPPER()将字符串全部转为⼤写。
6、ascii()
返回字符表达式最左端字符的ASCII 码值。
7、char()
db2中将ASCII 码转换为字符。如果没有输⼊0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。
8、连接字符串
db2:
select 'a'||'b' from sysibm.sysdummy1
Oracle:
select 'a'||'b' from dual
sqlserver:
select 'a'+ 'b'
9、替换函数 DB2中认为''和null不同
db2:value函数
db2 => values value(null,'a')--结果为a
db2 => values value('','a')--结果为空
Oracle:
nvl(par1,par2)--Oracle中null或''都代表为空
Sqlserver:
isnull(par1,par2)
10、返回参数集中第⼀个⾮null参数
values coalesce(null,null,'1')
11、LCASE、LOWER函数
语法:LCASE()、LOWER()
返回定长、变长字符串的⼩写形式
12、UCASE、UPPER函数返回定长、变长字符串的⼤写形式。
13、时间类型转换为字符类型
db2:
SELECT varchar(current timestamp) from sysibm.sysdummy1
Oracle:
ELECT to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dualsqlserver:
SELECT convert(varchar,getdate(),20)
14、db2的case when else
select case g.master_type
when 'system' then
'管理员'
when 'roletype' then
'特殊⾓⾊'
else
'普通⽤户'
end AS caseConvert
From global_code g;
15、DB2数据类型改变函数:varchar()、int()、date()、time()等
SQL Server: SELECT convert(varchar,getdate(),20)
Oracle:SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
DB2: SELECT varchar(current timestamp) from sysibm.sysdummy1
16、取前⼏条记录
SQL Server: Select top n * from xtable
Oracle:Select * from xtable where rownum <=n
DB2:select * from syscat.tables fetch first 10 rows only
17、repeat函数
语法:repeat(parm,int z)
将parm重复z次后输出select repeat('a',10) from sysibm.sysdummy1;
18、replace函数
语法:REPLACE(EXP1,EXP2,EXP3) REPLACE函数⽤EXP3代替EXP1中所有的EXP2。
db2 => select replace('abcde','bc','oo') from sysibm.sysdummy1
1
-----
aoode
19、REPEAT函数
语法:REPEAT(ARG1,NUM_TIMES) REPEAT函数返回ARG1被重复NUM_TIMES次的字符串。
eg:
SELECT REPEAT(NAME,2) FROM T1
20、POSSTR函数
语法:POSSTR(EXP1,EXP2) POSSTR函数返回EXP2在EXP1中第⼀次出现的位置。
db2 => select posstr('abca','a') from sysibm.sysdummy1
1
-----------
1
21、INSERT函数
语法:INSERT(ARG1,POS,SIZE,ARG2) INSERT函数返回⼀个字符串,将ARG1从POS处删除SIZE个字符,将ARG2插⼊该位置。
这⾥的pos是按字节数算的。如果转化成按字符数算,可以改写成:INSERT(ARG1,POS,SIZE,ARG2,CODEUNITS16)db2 => select insert('abcde',2,2,'中') from sysibm.sysdummy1
1
--------
a中de
22、CONCAT函数 等价于 ||
语法:CONCAT(ARG1,ARG2) CONCAT函数返回两个字符串的连接。
db2 => select concat('a','b') from sysibm.sysdummy1
1
--
ab
23、LEFT、RIGHT函数
语法:LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH) LEFT、RIGHT函数返回ARG最左边、右边的LENGTH个字符串,ARG可以是CHAR或BINARY STRING。
这两个函数的length参数是按字节数算。如果想转化成按字符数算,可以改写成LEFT(ARG,LENGTH,CODEUNITS16) db2 => select left('abcd',3),right('abcd',2) from sysibm.sysdummy1
db2函数-v2
db2函数db2中用法次数hive替换方案
SUM22256sum
VALUEVALUE(EXPRESSION1,EXPRESSION2)18398coalesce(T v1, T v2)
COUNT4010count
CHARCHAR(ARG)3983cast(… as string) 或 string()
DECIMALDECIMAL(ARG)2973cast(… as decimal)
VARCHARVARCHAR(ARG)
VARCHAR(ARG,LENGTH)2706string(arg)
substr(string(arg), 0,int len)
DATEDATE(ARG)2404to_date(string timestamp)
MAX1502max
SUBSTR998substr(string A, int start, int len)
INT689cast(… as int) 或 int()
SIGN515sign(double a)
TRIM427trim(string A)
ROUND411round(double a)
RTRIM373rtrim(string A)
DECDEC(ARG)354cast(… as decimal)
MONTH311month(string date)
DAY259day(string date) dayofmonth(date)
DOUBLE231cast(… as double) 或 double()
UPPER209upper(string A) ucase(string A)
AVG188avg
DAYOFMONTH179dayofmonth(date)
MIN161min
MIN161max
BIGINT139cast(… as ) 或 bigint()
LENGTH136length(string A)
LTRIM129ltrim(string A)
YEAR115year
DAYSDAYS(expression)63datediff(string enddate, string "0001-01-
db2 字符串匹配函数
db2 字符串匹配函数
DB2是一款常用的关系型数据库管理系统,其中包含了许多字符串匹配函数,这些函数可以帮助我们在数据库中进行字符串的匹配、查找和替换等操作。本文将介绍一些常用的DB2字符串匹配函数,并详细说明它们的用法和功能。
一、LIKE函数
LIKE函数是DB2中最常用的字符串匹配函数之一。它可以用于在数据库中查找满足特定模式的字符串。LIKE函数的基本语法如下:
SELECT 列名 FROM 表名 WHERE 列名 LIKE '模式';
其中,模式可以使用通配符来表示特定的字符或字符序列。通配符包括:
- %:表示任意字符序列(包括空字符序列)。
- _:表示任意单个字符。
例如,我们可以使用以下语句查找所有以字母A开头的字符串:
SELECT 列名 FROM 表名 WHERE 列名 LIKE 'A%';
二、LOCATE函数
LOCATE函数可以用于查找子字符串在目标字符串中的位置。它的基本语法如下:
LOCATE(子字符串, 目标字符串, 起始位置);
其中,子字符串是要查找的字符串,目标字符串是要在其中查找的字符串,起始位置是查找的起始位置。如果找到了子字符串,则返回子字符串在目标字符串中的位置;如果未找到,则返回0。
例如,我们可以使用以下语句查找字符串"apple"在目标字符串中的位置:
SELECT LOCATE('apple', 列名) FROM 表名;
三、SUBSTR函数
SUBSTR函数可以用于截取字符串的子字符串。它的基本语法如下:
SUBSTR(字符串, 起始位置, 长度);
其中,字符串是要截取的字符串,起始位置是截取的起始位置,长度是要截取的子字符串的长度。
例如,我们可以使用以下语句截取字符串"apple"的前三个字符:
SELECT SUBSTR('apple', 1, 3) FROM 表名;
四、CONCAT函数
CONCAT函数可以用于连接多个字符串。它的基本语法如下:
db2时间转换函数
db2时间转换函数
在DB2中,你可以使用多种函数来转换时间。以下是一些常用的时间转换函数:
1. CAST函数: 用于将一个数据类型转换为另一个数据类型。
```sql
SELECT CAST(column_name AS VARCHAR(10)) FROM table_name;
```
2. CONVERT函数: 类似于CAST函数,用于将一个数据类型转换为另一个数据类型。
```sql
SELECT CONVERT(VARCHAR(10), column_name) FROM table_name;
```
3. DATE格式化函数: 使用DATE()函数与格式字符串可以格式化日期。
```sql
SELECT DATE(column_name, 'YYYY-MM-DD') FROM table_name;
```
4. TIMESTAMP格式化函数: 使用TIMESTAMP()函数与格式字符串可以格式化日期和时间。
```sql
SELECT TIMESTAMP(column_name, 'YYYY-MM-DD HH:MI:SS') FROM
table_name;
```
5. YEAR(), MONTH(), DAY(): 从日期中提取年份、月份和日期。
```sql
SELECT YEAR(column_name), MONTH(column_name),
DAY(column_name) FROM table_name;
```
6. HOUR(), MINUTE(), SECOND(): 从时间戳中提取小时、分钟和秒。
```sql
SELECT HOUR(column_name), MINUTE(column_name),
SECOND(column_name) FROM table_name;
```
7. ADD_MONTHS(): 在日期上添加或减去月份。
```sql
db2当前时间函数
- 1 - db2当前时间函数
在DB2数据库中,可以使用当前时间函数来获取当前的日期和时间。以下是一些常用的当前时间函数:
1. CURRENT_DATE:返回当前日期,格式为YYYY-MM-DD。
2. CURRENT_TIME:返回当前时间,格式为HH:MM:SS。
3. CURRENT_TIMESTAMP:返回当前日期和时间,格式为YYYY-MM-DD HH:MM:SS。
可以使用下面的SQL语句来获取当前时间:
SELECT CURRENT_TIMESTAMP FROM SYSIBM.SYSDUMMY1;
输出结果将显示当前的日期和时间。
除了以上的函数,还有一些其他的函数可以用来处理日期和时间。例如,DATE函数可以从一个日期或时间字符串中提取日期部分,而TIME函数可以从一个日期或时间字符串中提取时间部分。
在使用这些函数时,需要注意数据类型的转换问题。例如,如果要将一个字符串转换为日期或时间类型,可以使用CAST函数或CONVERT函数来进行转换。
总之,使用当前时间函数可以方便地获取当前的日期和时间,并且在处理日期和时间方面也非常实用。
Oracle中INSTR函数,及在DB2、Sybase中与Instr函数功能相同的函数
Oracle中INSTR函数,及在DB2、Sybase中与Instr函数功能相同的函数
一、Oracle中INSTR函数
INSTR (源字符串, 目标字符串, 起始位置, 匹配序号)
在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,就是说从字符的开始到字符的结尾就结束。
语法如下:
instr( string1, string2 [, start_position [, nth_appearance ] ] )
参数分析: string1 源字符串,要在此字符串中查找。
string2 要在string1中查找的字符串.
start_position 代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
nth_appearance 代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。
注意: 如果String2在String1中没有找到,instr函数返回0.
示例: SELECT instr('syranmo','s') FROM dual; -- 返回 1
SELECT instr('syranmo','ra') FROM dual; -- 返回 3
SELECT instr('syran mo','a',1,2) FROM dual; -- 返回 0
(根据条件,由于a只出现一次,第四个参数2,就是说第2次出现a的位置,显然第2次是没有再出现了,所以结果返回0。注意空格也算一个字符!)
SELECT instr('syranmo','an',-1,1) FROM dual; -- 返回 4
(就算是由右到左数,索引的位置还是要看‘an’的左边第一个字母的位置,所以这里返回4)
db2 timestamp 函数
db2 timestamp 函数
DB2是一个关系型数据库管理系统,它被广泛应用于企业级应用程序中。DB2提供了许多内置函数,用于执行各种操作和计算。其中,timestamp函数用于处理日期和时间数据。本文将逐步解释DB2的timestamp函数,并说明如何使用它进行日期和时间操作。
1. 什么是timestamp函数?
timestamp函数是DB2中与日期和时间相关的函数之一。它接受日期和时间作为输入,并返回一个包含日期和时间信息的特定格式的字符串。timestamp函数可以在SELECT语句中使用,也可以在INSERT或UPDATE语句中使用。
2. timestamp函数的语法是什么?
timestamp函数的基本语法如下:
TIMESTAMP (expression1 [AS timezone-expression])
其中,expression1是一个表示日期和时间的输入表达式。timezone-expression是一个可选的参数,用于指定时区信息。如果省略时区参数,timestamp函数将根据数据库配置的默认时区进行操作。
3. timestamp函数的用途是什么?
timestamp函数的主要用途是执行日期和时间相关的计算和操作。它可以用于以下方面:
- 将日期和时间数据转换为特定字符串格式,用于显示或存储。
- 比较两个日期或时间,并确定它们的顺序。
- 添加或减去一定的时间量,以实现日期和时间的偏移。
- 提取日期部分或时间部分,以获取特定的信息。
4. 如何使用timestamp函数进行日期和时间转换?
要将日期或时间转换为特定字符串格式,可以使用timestamp函数的以下用法之一:
- SELECT TIMESTAMP(date_column) FROM table_name;
- SELECT TIMESTAMP(time_column) FROM table_name;
DB2常用函数总结
1、VALUE函数
语法:VALUE(EXPRESSION1,EXPRESSION2)
VALUE函数是用返回一个非空的值,当其第一个参数非空,直接返回该参数的值,如果第一个参数为空,则返回第一个参数的值。
2、COALESCE函数
语法:COALESCE(ARG1,ARG2...)
COALESCE返回参数集中第一个非null参数。用法类似于VALUE函数。
3、LENGTH函数
语法:LENGTH(ARG)
LENGTH函数返回参数的长度。
4、LCASE、LOWER函数
语法:LCASE()、LOWER()
LCASE、LOWER函数返回定长、变长字符串的小写形式。
5、UCASE、UPPER函数
语法:UCASE()、UPPER()
UCASE、UPPER函数返回定长、变长字符串的大写形式。
6、LTRIM、RTRIM函数
语法:LTRIM()、RTRIM()
LTRIM、RTRIM函数从CHAR、VARCHAR、GRAPHIC或者VARGRAPHIC中去掉左侧或右侧的空格。
7、LEFT、RIGHT函数
语法:LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH)
LEFT、RIGHT函数返回ARG最左边、右边的LENGTH个字符串,ARG可以是CHAR或BINARY STRING。
8、CONCAT函数
语法:CONCAT(ARG1,ARG2)
CONCAT函数返回两个字符串的连接。
9、INSERT函数
语法:INSERT(ARG1,POS,SIZE,ARG2)
INSERT函数返回一个字符串,将ARG1从POS处删除SIZE个字符,将ARG2插入该位置。
select INSERT('zhongguonihao',6,3,'GUO') from
KFZ_ZYQ_TWH_JF where CUST_ID = 97130
返回:zhongGUOnihao
10、LOCATE函数
db2字符串的有关函数
一、字符转换函数
1、ASCII()
返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用„‟括起来,但含其它字符的字符串必须用„‟括起来使用,否则会出错。
2、CHAR()
将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。
3、LOWER()和UPPER()
LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。
4、STR()
把数值型数据转换为字符型数据。
STR ([,length[, ]])
length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。
当length 或者decimal 为负值时,返回NULL;
当length 小于小数点左边(包括符号位)的位数时,返回length 个*;
先服从length ,再取decimal ;
当返回的字符串位数小于length ,左边补足空格。
二、去空格函数
1、LTRIM() 把字符串头部的空格去掉。
2、RTRIM() 把字符串尾部的空格去掉。
三、取子串函数
1、left()
LEFT (, )
返回character_expression 左起 integer_expression 个字符。
2、RIGHT()
RIGHT (, )
返回character_expression 右起 integer_expression 个字符。
3、SUBSTRING()
SUBSTRING (, , length)
返回从字符串左边第starting_ position 个字符起length个字符的部分。
四、字符串比较函数
1、CHARINDEX()
返回字符串中某个指定的子串出现的开始位置。
db2 md5加密函数
db2 md5加密函数
DB2 MD5加密函数是一种常用的加密算法,它可以将任意长度的数据转换成固定长度的128位哈希值。这种哈希值是不可逆的,即无法通过哈希值反推出原始数据。因此,MD5加密函数被广泛应用于密码存储、数字签名等领域。
在DB2数据库中,MD5加密函数可以通过以下语法进行调用:
SELECT MD5(‘string’)
其中,‘string’是要加密的字符串。调用MD5函数后,将返回一个128位的哈希值,可以将其存储在数据库中,以保证密码的安全性。
MD5加密函数的优点在于其加密速度快、哈希值长度固定、不可逆等特点。但是,由于MD5算法存在一些安全漏洞,如碰撞攻击等,因此在一些安全性要求较高的场合,建议使用更加安全的加密算法,如SHA-256、SHA-512等。
除了MD5函数外,DB2数据库还提供了其他常用的加密函数,如SHA-1、SHA-256、SHA-512等。这些函数可以根据不同的安全需求进行选择,以保证数据的安全性。
DB2 MD5加密函数是一种常用的加密算法,可以有效保护密码等敏感信息的安全性。但是,在使用时需要注意其安全性漏洞,建议根据实际需求选择更加安全的加密算法。
db2 md5加密函数 2
db2 md5加密函数
DB2是一种关系型数据库管理系统,其提供了多种加密函数,其中包括MD5加密函数。MD5算法是一种常用的哈希算法,可以将任意长度的文本转换为固定长度的数字签名,常用于加密和校验数据。本文将介绍DB2中MD5加密函数的使用方法和注意事项。
一、MD5加密函数的语法和参数
在DB2中,MD5加密函数的语法如下:
```
SELECT MD5(string_expression) FROM table_name;
```
其中,string_expression表示要加密的字符串或表达式,可以是任意长度的字符型、二进制型或LOB型数据。如果要加密的是blob或clob类型的数据,需要使用getblob或getclob函数获取数据。返回值是一个128位的十六进制数字签名,长度为32个字符。
二、MD5加密函数的注意事项
1. MD5算法不可逆,不能通过加密结果反推出原文。
2. MD5加密函数只能处理字符串或LOB类型的数据,不能处理其他类型的数据。
3. 可以使用concat函数将多个字符串拼接成一个字符串,然后再进行MD5加密。例如:
```
SELECT MD5(concat(col1, col2, col3)) FROM table_name;
```
4. 对于二进制数据,需要先将其转换为十六进制字符串,然后再进行MD5加密。例如:
```
SELECT MD5(hex(binary_data)) FROM table_name;
```
5. 长度超过2GB的LOB类型数据不能直接进行MD5加密,需要使用LOCATOR函数分段读取,再进行MD5加密。
三、MD5加密函数的应用场景
1. 密码加密:在用户注册或修改密码时,将用户的密码进行MD5加密后存储。这样即使数据库被黑客盗取,也无法轻易获取到用户的密码。
2. 数据校验:对于需要验证数据完整性的场景,可以将原始数据进行MD5加密后存储,再比对后续传输的数据是否与加密结果一致,以确定数据是否被篡改。
