select 函数用法语句的函数有

linux下c语言select函数用法-红联Linux系统门户
linux下c语言select函数用法
select(I/O多工机制)
表头文件 #i nclude
#i nclude
#i nclude
定义函数 int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);
函数说明 select()用来等待文件描述词状态的改变。参数n代表最大的文件描述词加1,参数readfds、writefds 和exceptfds 称为描述词组,是用来回传该描述词的读,写或例外的状况。底下的宏提供了处理这三种描述词组的方式:
FD_CLR(inr fd,fd_set* set);用来清除描述词组set中相关fd 的位
FD_ISSET(int fd,fd_set *set);用来测试描述词组set中相关fd 的位是否为真
FD_SET(int fd,fd_set*set);用来设置描述词组set中相关fd的位
FD_ZERO(fd_set *set);用来清除描述词组set的全部位
参数 timeout为结构timeval,用来设置select()的等待时间,其结构定义如下
struct timeval
{
time_t tv_
time_t tv_
};
返回值 如果参数timeout设为NULL则表示select()没有timeout。
错误代码 执行成功则返回文件描述词状态已改变的个数,如果返回0代表在描述词状态改变前已超过timeout时间,当有错误发生时则返回-1,错误原因存于errno,此时参数readfds,writefds,exceptfds和timeout的值变成不可预测。
EBADF 文件描述词为无效的或该文件已关闭
EINTR 此调用被信号所中断
EINVAL 参数n 为负值。
ENOMEM 核心内存不足
范例 常见的程序片段:fs_set readset;
FD_ZERO(&readset);
FD_SET(fd,&readset);
select(fd+1,&readset,NULL,NULL,NULL);
if(FD_ISSET(fd,readset){……}
下面是linux环境下select的一个简单用法
#include
#include
#include
#include
#include
#include
int main ()
{
int ret,i;
fd_
st
keyboard = open("/dev/tty",O_RDONLY | O_NONBLOCK);
assert(keyboard>0);
while(1)
{
timeout.tv_sec=1;
timeout.tv_usec=0;
FD_ZERO(&readfd);
FD_SET(keyboard,&readfd);
ret=select(keyboard+1,&readfd,NULL,NULL,&timeout);
if(FD_ISSET(keyboard,&readfd))
{
i=read(keyboard,&c,1);
if('\n'==c)
printf("hehethe input is %c\n",c);
if ('q'==c)
}
}
}
用来循环读取键盘输入找不到答案?
在一个MaxCompute select中只能有一个udtf,不可以再出现其它的列 其他都懂,就是这个有点没明白,这个函数属于UDTF?不算是内建函数吗?如果我的select语句使用了trans_array就不能再使用其他自定义函数了?
在一个MaxCompute select中只能有一个udtf,不可以再出现其它的列其他都懂,就是这个有点没明白,这个函数属于UDTF?不算是内建函数吗?如果我的select语句使用了trans_array就不能再使用其他自定义函数了?
按投票排序
按时间排序
<dd id="vote_num_
UDTF使用上有一些限制:所有作为key的列必须处在前面,而要转置的列必须放在后面。在一个select中只能有一个udtf,不可以再出现其它的列不可以与group by/cluster by/distribute by/sort by一起使用。
登录后可回答问题,请
是基于语音识别、语音合成、自然语言理解等技术,为企业在多种实际应用场景下,赋予产品“能听、会说、懂你”式的智能人...
阿里云函数计算(Function Compute)是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器...
一个稳定可靠的集中式访问控制服务。您可以通过访问控制将阿里云资源的访问及管理权限分配给您的企业成员或合作伙伴。
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...欢迎加入我们,一同切磋技术 &
用户名: &&&
密 码: &
共有 3184 人关注过本帖
标题:请问select语句中如何使用自定义函数
等 级:新手上路
帖 子:16
结帖率:66.67%
&&已结贴√
&&问题点数:20&&回复次数:10&&&
请问select语句中如何使用自定义函数
请问select语句中如何使用自定义函数
//c# vs2008 access环境
//chs2spell()函数为将汉字转化为拼音的函数
//如 chs2spell(&食品质量&)=&ShiPingZhiLiang&&&&&&&
&public static string chs2spell(string chs)
&&&&&&&&& .......
//数据库中的表 单位名称 为一些单位名称
//我的想法是取出单位名称的同时也得到单位名称的拼音,使用以下select 语句
sql=&select 单位名称,chs2spell(单位名称) from 单位名称&;
但在连接时提示 “表达未来中函数'chs2spell'未定义”
请问高手,如何解决?
搜索更多相关主题的帖子:
等 级:业余侠客
帖 子:208
专家分:226
数据库表里的字段名都是中文的?
'&+chs2spell(单位名称)+&',这样试试呢。
如果不可以,就来笨点的办法:
string name =chs2spell(单位名称);
sql=select name form&&表名,这样肯定可以。祝你好运。
[ 本帖最后由 ghl2312 于
15:50 编辑 ]
向灰太狼学习
等 级:新手上路
帖 子:16
字段名为:单位名称
---------------------------------------
'&+chs2spell(单位名称)+&',这样试试呢。&&& 此种方式提示:
编译器错误消息: CS0103: 当前上下文中不存在名称“单位名称”
string name =chs2spell(单位名称);&&& 方式提示:
编译器错误消息: CS0103: 当前上下文中不存在名称“单位名称”
-----------------------------------------------
单位名称为字段名,如何处理呢?谢谢上面的同学,请确认!
不知有无相关的小例子,参照一下!
等 级:业余侠客
帖 子:208
专家分:226
回复 3楼 如何下载电影
晕倒,你见过一个方法直接传一个未定义的参数没
方法的参数要先定义的哇。
向灰太狼学习
等 级:论坛游侠
帖 子:39
专家分:120
只有先取出单位名称,然后对每个单位名称调用自定义函数
等 级:新手上路
帖 子:16
回复 5楼 yjy1987420
如果那样的话效率就会很低,又得一次循环;
select 单位名称,chs2spell(单位名称) from 单位名称;
上面是不行的,但如果是内置函数就只可以
select 单位名称,len(单位名称) from 单位名称;
问题是如何让select 把自定义函数当内置函数一样对待呢?
回复 4楼 ghl2312
晕倒,你见过一个方法直接传一个未定义的参数没
方法的参数要先定义的哇。
请举出实例,不是很明白您的意思!
等 级:论坛游侠
帖 子:39
专家分:120
len是sql函数,当然可以调用。
你想在SELECT语句中调用C#中自定义的函数估计不大可能。除非你把自定义函数写成SQL函数。
等 级:新手上路
帖 子:16
在c#中,如何写sql函数;
如果在sql中写,基本上不可能的,太复杂了!
等 级:新手上路
帖 子:16
昨天找一个方法,今天再试一试,好麻烦啊
等 级:论坛游侠
帖 子:37
专家分:141
建议楼主用存储过程写!
学C#的可进此QQ高级群,欢迎学生和工作人士
名称:C#的艺术
版权所有,并保留所有权利。
Powered by , Processed in 0.078605 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights ReservedSELECT 语句
SELECT语句
一、基本语法
SELECT 字段列表 FROM
{表名} WHERE 条件 GROUP BY
ORDER BY 排序字段
其中&WHERE&、&GROUP BY&和&ORDER BY&是可选的
,这三者的顺序是不能调换的。
再次提示:SQL语句中的表名必须用大括号括起来,这是Foxtable的一个非常特殊的要求。
SELECT 产品, 客户, 单价, 数量, 日期 FROM {订单}
字段列表不能包括表达式列,例如金额列是一个表达式列,是通过数量和单价计算得出的,所以金额列不能出现在字段列表中。
这是因为表达式列并没有存储在后台的数据源中。
如果你要包括所有字段,那么直接用*代替字段列表即可:
SELECT * FROM {订单}
如果需要排除重复的行,可以在字段列表前面加上关键词DISTINCT,例如获得所有产品名称:
SELECT DISTINCT 产品 FROM {订单}
再例如获得每个客户订购过的产品:
SELECT DISTINCT 客户, 产品 FROM {订单}
如果不需要获得所有的数据,可以使用TOP关键词指定行数,假定只需加载10行数据:
SELECT TOP 10 * FROM {订单}
如果要按百分数加载数据,那么请加上PERCENT关键词,例如加载10%的订单:
SELECT TOP 10 PERCENT * FROM {订单}
TOP 和 PERCENT关键词对于Oracle数据源是无效的,Oracle用ROWNUM,这是一个默认的列,表示加载行的序号,例如:
Select * From {EMPLOYEES} Where ROWNUM &= 50
表示从EMPLOYEES表加载前50行数据。
可以用ORDER BY指定排序方式,例如根据日期顺序加载数据:
SELECT * FROM {订单} ORDER BY 日期
默认的排序方式是升序,如果希望降序排序,可以在排序列后面加上DESC关键词,例如:
SELECT * FROM {订单} ORDER BY 日期 DESC
排序列可以是多列,例如首先根据产品排序,相同产品的行则根据日期排序:
SELECT * FROM {订单} ORDER BY 产品,日期
TOP关键词如果没有和ORDER BY配合使用,那么毫无意义,因为得到的只是随机提取的一些行。
如果你要获得最近的10个订单:
SELECT TOP 10 * FROM {订单} ORDER BY 日期 DESC
注意必须加上关键词DESC,否则你得到的将是最早的10个订单,而不是最近的10个订单
由于Oracle没有TOP关键词,所以要实现上述目标,须使用下面的语句:
SELECT * FROM {订单} Where ROWNUM &= 10 ORDER BY 日期
可以使用AS关键词重新命名列,例如:
SELECT 产品, 客户, 单价, 数量 AS 订购数量,日期 AS 订购日期 FROM {订单}
上述查询语句得到的结果中,&数量&列将被改名为&订购数量&,&日期&列被改名为&订购日期&
你还可以直接在SELECT语句中使用表达式,例如:
SELECT 产品, 客户, 单价, 数量, 数量 * 单价 AS 金额, 日期 FROM {订单}
上述的语句新生成一个金额列,该列的值等于数量乘以单价(数量*单价)
二、条件表达式
可以用WHERE关键词设置查询条件,多个条件可以用AND或者OR运算符连接。
例如加载产品为PD01和PD02订单:
SELECT * FROM {订单} WHERE 产品 = 'PD01' OR 产品 = 'PD02'
再例如加载1999年1月份的订单:
SELECT * FROM {订单} WHERE 日期 &= #1/1/1999# AND 日期 &=
#1/31/1999#
如果数据源是SQl SERVER,日期常量用单引号而不是#号括起来,例如:
SELECT * FROM {订单} WHERE 日期 &= '1/1/1999' AND 日期
&= '1/31/1999'
如果是Oracle的数据源,必须用TO_DATE函数转换,例如加载日的订单:
SELECT * FROM {订单} WHERE 日期
= TO_DATE('10/21/1999','MM/DD/YYYY')
IN运算符是用来判断一个表达式的值是否属于一个指定列表中的值。
例如同样是加载产品PD01和PD02的订单,用IN运算符可以简化为:
SELECT * FROM {订单} WHERE 产品 IN ('PD01','PD02')
可以用NOT关键词来进行反向的操作,例如加载除产品PD01和PD02之外的订单:
SELECT * FROM {订单} WHERE 产品 NOT IN ('PD01','PD02')
显然,指定的值越多,IN运算符的优势越明显。
BETWEEN运算符
BETWEEN运算符用于判断一个表达式的值是否介于一个特定的范围之间,起始值和终止值用运算符AND连接起来
例如加载1999年1月份的订单:
SELECT * FROM {订单} WHERE 日期 BETWEEN #1/1/1999# AND #1/31/1999#
再例如加载折扣在0.1到0.2之间的订单
SELECT * FROM {订单} WHERE 折扣 BETWEEN 0.1 AND 0.2
可以用NOT关键词来进行反向的操作,例如加载折扣在0.1到0.2之外的订单:
SELECT * FROM {订单} WHERE 折扣 NOT BETWEEN 0.1 AND 0.2
LIKE运算符
LIKE运算符用于将指定表达式的值和一个模式字符串进行比较,判断两者是否匹配。
LIKE可以使用通配符,通配符包括:
匹配单个字符
%(百分号)
匹配任意个数的字符
Like 'C%',
表示以字符C开始的值。
Like 'A_e%'
表示第一个字母是A,第三个字母是e。
找出姓名为三个字,且第二个字是“文”的客户:
Select * From {客户} Where 姓名 Like '_文_'
找出客户表中的贸易公司:
SELECT * FROM {客户} WHERE 公司名称 LIKE '%贸易%'
可以利用NOT关键词进行反向操作,例如:
SELECT * FROM {客户} WHERE 公司名称 NOT LIKE '%贸易%'
找出所有非贸易公司。 
IS NULL 运算符
IS NULL操作符被用于判断一个表达式的值是否为空,例如:
SELECT * FROM {订单} WHERE 折扣 IS NULL
表示加载没有输入折扣的订单,注意0不是空,所以上面的语句不会加载折扣为0的订单。
SELECT * FROM {订单} WHERE 折扣 IS NULL OR 折扣 = 0
表示加载出没有输入折扣或者折扣为0的订单。
可以用NOT进行反向操作,例如:
SELECT * FROM {订单} WHERE 折扣 IS NOT NULL
表示加载出已经输入折扣的订单。
三、 数据统计和聚合函数
聚合函数用于统计数据,通常和GROUP BY关键词配合使用。
返回指定表达式的总计值。
返回指定表达式的平均值。
返回指定表达式的最大值。
返回指定表达式的最小值。
返回符合指定条件的记录数
返回指定表达式的总体方差
返回指定表达式的总体方差
返回指定表达式的总体标准偏差
返回指定表达式的总体样本标准偏差
统计订单表总的订购数量:
SELECT SUM(数量) AS 总计 FROM {订单}
再例如统计总的订单数:
SELECT Count(*) AS 总订单数 FROM {订单}
可以同时进行多个统计:
SELECT SUM(数量) AS 总计, AVG(数量) AS 平均 , MAX(数量) AS 最大,
MIN(数量) AS 最小 FROM {订单}
可以得到订单表数量列的累计值、平均值、最大值、最小值。
更多的时候,聚合函数是GROUP BY关键词配合使用的,用于进行分组统计。
例如统计每个客户订购产品的数量:
SELECT 客户,SUM(数量) AS 数量 FROM {订单} GROUP BY 客户
分组列必须同时包括在SELECT子句和GROUP BY子句中,例如上面的客户列。
统计每个客户的订单数、订购数量、订购金额:
SELECT 客户,Count(*) AS 订单数, SUM(数量) AS 数量, SUM(数量 * 单价 * (1 -
折扣)) AS 金额 FROM {订单} GROUP BY 客户
注意金额列是通过一个表达式计算得出的。
可以有多个分组列,例如统计每个客户订购不同产品的数量:
SELECT 客户, 产品, SUM(数量) AS 数量 FROM {订单} GROUP BY 客户,产品
四、HAVING字句
HAVING和WHERE有点类似,不同的是WHERE用于过滤记录,而HAVING用于过滤分组。
例如我要统计出定购PD01产品的客户以及其订购数量,而且只列出总订购数量超过500的客户:
SELECT 客户,SUM(数量) FROM {订单} WHERE 产品 = 'PD01' GROUP BY 客户
HAVING SUM(数量) & 500
五、UNION 运算符
UNION运算符用于组合两个查询的结果。
例如有一个客户表,一个供应商表,我需要得到所有在中国的客户和供应商的名称和地址。
因为数据位于不同的表中,显然,我们需要用两个查询才能完成任务:
SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = '中国' UNION SELECT 公司名称, 地址
FROM {供应商} WHERE 国家 = '中国'
两个查询的字段名称、个数、类型必须完全一致才行。
默认情况下,UNION会自动排除重复的行,然后你可以用ALL关键词来确保返回所有的行,例如:
SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = '中国' UNION ALL SELECT 公司名称,
地址 FROM {供应商} WHERE 国家 = '中国'
六、 子查询
例如希望得到数量大于平均订购数量的订单:
Select * From {订单} Where 数量 &
(Select Avg(数量) From {订单})
上述语句中的绿色部分,是一个独立的SQL语句,用于得到平均订购数量,这就是子查询,子查询必须用括号括起来。
子查询可以针对另一个表,例如希望得到单价大于平均销售单价的产品:
Select * From {产品} Where 单价 &
(Select Avg(单价) From {订单明细})
再例如希望得到订单数超过50个的产品:
Select * From {产品} Where (Select Count(*) From
{订单明细} Where {订单明细}.产品ID = 产品.产品ID) & 50
子查询只能包括一列,多于一列会报错。
In子查询用于判断查询结果的某列,在另一个查询的某列是否有对应的值。
例如查询在日之后订购过产品的客户的详细资料:
SELECT * FROM {客户} WHERE 客户ID IN (SELECT 客户ID FROM {订单} WHERE 订购日期
你可以用NOT进行反向操作,例如我们希望查询在日之后没有订购过产品的客户的详细资料:
SELECT * FROM {客户} WHERE 客户ID NOT IN (SELECT 客户ID FROM
{订单} WHERE
订购日期 & ##)
EXISTS子查询
EXISTS用于判断子查询是否有记录。
例如要列出所有订购过产品的客户资料:
SELECT * FROM {客户} WHERE EXISTS (SELECT * FROM {订单} WHERE
{订单}.客户ID
= {客户}.客户ID)
请注意子查询的比较语句:
{订单}.客户ID = {客户}.客户ID
该语句明确了比较字段的表名,因为两个字段来源于不同的表。
你可以用NOT进行反向操作,例如列出从来没有订购过产品的客户资料:
SELECT * FROM {客户} WHERE NOT EXISTS (SELECT * FROM {订单} WHERE
{订单}.客户ID = {客户}.客户ID)
七、多表查询
一般用户可以忽略以下内容,因为Foxtable提供了,可以轻松解决这种多表查询问题。
有的时候,你可能希望查询表的列来自于多个表,可以通过JOIN语句来实现这样的功能。JOIN语句可以让你从已经定义了相互关系的工作表中检索记录,而不用管记录和工作表之间的关系是一对一、一对多还是多对多。
SELECT 字段列表 FROM
{表1} INNER JOIN {表2} ON
{表1}.列名 = {表2}.列名
ON关键词指定两个表通过哪一列进行连接,指定的字段必须具备相同的数据类型和长度。
如果某个字段在不止一个表中出现,必须在Select语句中明确表的名称,格式为:
{表名}.列名
SELECT {订单明细}.*, 产品名称 FROM {订单明细} INNER JOIN {产品} ON
{订单明细}.产品ID =
{产品}.产品ID ORDER BY 订单ID
上述语句生成的查询表,包括订单明细的所有列,以及该订单明细对应的产品名称(来源于产品表)
INNER JOIN要求两个表必须都有对应的记录,才会在查询表中生成记录。你还可以用LEFT JOIN 或者 RIGHT
JOIN,前者只要求左边的表有对应的记录即可,后者只要求右边的表有对应的记录即可。
数据不仅可以来自于两个表,还可以来自于更多的表,例如下面的语句:
SELECT 订购日期, {订单明细}.*, 产品名称 FROM ({订单明细} INNER JOIN
{订单明细}.产品ID = {产品}.产品ID) INNER JOIN {订单} ON {订单明细}.订单ID = {订单}.订单ID ORDER BY 订购日期
上面的查询表的列来自于三个表,其中订购日期来自于订单表,产品名称来自于产品表,其余来自订单明细表。
下面的查询,列来自于四个表:
SELECT 订购日期,公司名称,产品名称, 数量, {订单明细}.单价, 折扣, (数量 * {订单明细}.单价 *
(1-折扣)) AS 金额 FROM (({订单明细} INNER JOIN {产品} ON {订单明细}.产品ID = {产品}.产品ID) INNER JOIN
{订单明细}.订单ID = {订单}.订单ID) INNER JOIN {客户} ON {订单}.客户ID = {客户}.客户ID
在上面的查询中,因为产品表和订单明细表都有单价列,所以字段列表中对于单价列的引用,要明确引用的是哪一个表的单价列,例如:订单明细.单价
此外,在有多个JOIN语句的情况下,靠前的JOIN语句要用圆括号括起来,如前面的例子所示。select语句(3)--单值函数
第三章:单值函数
1.单值函数
1.字符函数
2.日期函数
3.转换函数
4.数字函数
2.分组函数
在了解单值函数之前,我们先介绍一下哑表:
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。
如下面语句,我们查询后能够看到只有列D,其内容为X:
显示1+1的结果,可以看出,dual很多时候是为了构成select的标准语法
select 1+1
1、字符函数
LOWER Converts to lowercase
UPPER Converts to uppercase
INITCAP Converts to initial capitalization
CONCAT Concatenates values
SUBSTR Returns substring
LENGTH Returns number of characters
NVL Converts a null value
lower 把字符转为小写
例如:把&#39;HELLO&#39;转换为小写
select lower(&#39;HELLO&#39;)
例如:把s_emp表中的last_name列的值转换为小写
select lower(last_name)
upper 把字符转换为大写
例如:把&#39;world&#39;转换为大写
select upper(&#39;world&#39;)
例如:把s_emp表中的last_name列的值转换为大写
select upper(last_name)
例如:查询s_emp表中名字为Ngao的人信息
这样是查不到:
select last_name,salary,dept_id
from s_emp
where last_name=&#39;NGAO&#39;;
这样就可以查询到了,因为表中没有这样的数据NGAO,但是表中有Ngao字符,则可以将表中内容转换为大写再查询:
select last_name,salary,dept_id
from s_emp
where upper(last_name)=&#39;NGAO&#39;;
initcap 把字符串首字母转换为大写
例如:把&#39;hELLO&#39;转换为首字母大写,其余字母小写
select initcap(&#39;hELLO&#39;)
concat 把俩个字符串连接在一起(类似之前的||的作用)
例如:把&#39;hello&#39;和&#39;world&#39;俩个字符串连接到一起,并且起个别名为msg
select concat(&#39;hello&#39;,&#39;world&#39;) msg
例如:把first_name和last_name俩个列的值连接到一起
select concat(first_name,last_name) as name
substr 截取字符串
例如:截取&#39;hello&#39;字符串,从第2个字符开始(包含第二个字符),截取后面连续的3个字符
select substr(&#39;hello&#39;,2,3)
length 获得字符串长度
例如:获得&#39;world&#39;字符串的长度
select length(&#39;world&#39;)
例如:获得s_emp表中last_name列的每个值的字符长度
select length(last_name)
nvl 替换列中为null的值
在前面的章节已经使用过了
select last_name,nvl(commission_pct,0)
2、数字函数
ROUND Rounds value to specified decimal
TRUNC Truncates value to specified decimal
MOD Returns remainder of pision
round 四舍五入
round(arg1,arg2)
第一个参数表示要进行四舍五入操作的数字
第二个参数表示保留到哪一位
保留到小数点后面2位
select round(45.923,2)
保留到个位 (个十百千万...)
select round(45.923,0)
保留到十位 (个十百千万...)
select round(45.923,-1)
trunc 截取到某一位
trunc(arg1,arg2)
和round的用法一样,但是trunc只舍去不进位
截取到小数点后面2位
select trunc(45.929,2)
截取到个位 (个十百千万...)
select trunc(45.923,0)
截取到十位 (个十百千万...)
select trunc(45.923,-1)
mod(arg1,arg2)
第一个参数表示要进行取余操作的数字
第二个参数表示参数1和谁取余
把10和3进行取余 (10除以3然后获取余数)
select mod(10,3)
3、日期函数
MONTHS_BETWEEN Number of months between two dates
ADD_MONTHS Add calendar months to date
NEXT_DAY Next day of the date specified
LAST_DAY Last day of the month
ROUND Round to date at midnight
TRUNC Remove time portion from date
sysdate关键字
表示的当前时间
显示时间:当前时间
注意:sysdate进行加减操作的时候,单位是天
显示时间:明天的这个时候
select sysdate+1
显示时间:昨天的这个时候
select sysdate-1
显示时间:1小时之后的这个日期
select sysdate+1/24
months_between 俩个日期之间相差多少个月(单位是月)
30天之后和现在相差多少个月
select months_between(sysdate+30,sysdate)
add_months 返回一个日期数据:表示一个时间点,往后推x月的日期
&#39;01-2月-2016&#39;往后推2个月
select add_months(&#39;01-2月-)
当前时间往后推4个月
select add_months(sysdate,4)
注意:这个数字也可以是负数,表示往前推x月
next_day 返回一个日期数据:表示一个时间点后的下一个星期几在哪一天
离当前时间最近的下一个星期5是哪一个天
select next_day(sysdate,&#39;星期五&#39;)
如果要使用&#39;FRIDAY&#39;,那么需要把当前会话的语言环境修改为英文
last_day 返回一个日期数据:表示一个日期所在月份的最后一天
当前日期所在月份的最后一天(月底)
select last_day(sysdate)
round 对日期进四舍五入,返回操作后的日期数据
把当前日期四舍五入到月
select round(sysdate,&#39;MONTH&#39;)
测试:15号16号分别是舍弃还是进位,测试时我们首先测试当天日期,然后在测试16号的日期,在测试15号的日期,测试过程如下所示:
sele//获取当前日期
select round(sysdate,&#39;month&#39;)//由于当天日期为16号,故使用当前日期进行测试
select round(sysdate-1,&#39;month&#39;)//由于当前日期为16号,故将其减一,使其为15号,然后输出测试结果
测试结果如下所示:
把当前日期四舍五入到年
select round(sysdate,&#39;YEAR&#39;)
//下面这个写法是错误的 ,数字函数也有一个round,两个ronnd函数有冲突,所以这里不能使用默认的日期格式
select round(&#39;01-2月-2016&#39;,&#39;MONTH&#39;)
我们可以使用一个转化函数进行转化,但是我们也可以使用add_months函数进行不专业的转换:
select round(add_months(&#39;01-2月-),&#39;MONTH&#39;)
trunc 对日期进行截取 和round类似,但是只舍弃不进位
在此处就不一一列出,唯一的不同就是只舍不进位
4、类型转换函数
TO_CHAR converts a number or date string to a character string.
TO_NUMBER converts a character string containing digits to a number.
TO_DATE converts a character string of a date to a date value.
to_char 把日期转换为字符
把当前日期按照指定格式转换为字符串
select to_char(sysdate,&#39;yyyy&#39;)
日期格式:
yyyy:四位数的年份
rrrr:四位数的年份
yy:两位数的年份
rr:两位数的年份
mm:两位数的月份(数字)
D:一周的星期几
DD:一月的第几天
DDD :一年的第几天
YEAR:英文的年份
MONTH:英文全称的月份
mon:英文简写的月份
ddsp:英文的第几天(一个月的)
ddspth:英文序列数的第几天(一个月的)
DAY:全英文的星期
DY:简写的英文星期
如下图所示:
测试常见的一些日期数据转换为字符串的格式
select to_char(sysdate,&#39;yyyy MM D DD DDD YEAR MONTH ddsp ddspth DAY DY&#39;)
select to_char(sysdate,&#39;dd-mm-yy&#39;)
select to_char(sysdate,&#39;yyyy-mm-dd&#39;)
select to_char(sysdate,&#39;dd-mm-yy HH24:MI:SS AM&#39;)
to_char 把数字转换为字符
select to_char(salary,&#39;$999,999.00&#39;)
fm表示去除结果显示中的开始的空格
select to_char(salary,&#39;fm$999,999.00&#39;)
L表示系统本地的货币符号
select to_char(salary,&#39;fmL999,999.00&#39;)
to_number 把字符转换为数字
select to_number(&#39;1000&#39;)
//这个写法是错的 abc不能转换为数字
select to_number(&#39;abc&#39;)
to_date 把字符转换为日期
select to_date(&#39;10-12-2016&#39;,&#39;dd-mm-yyyy&#39;)
select to_date(&#39;25-5月-95&#39;,&#39;dd-month-yy&#39;) //中文环境下的设置,在这里就不演示了
select to_char(to_date(&#39;25-may-12&#39;,&#39;dd-month-rr&#39;),&#39;yyyy-mm-dd&#39;) //这个问题涉及千年虫问题,再下面的博客中会有专门讲解
select to_date(&#39;95/may/25&#39;,&#39;yy/month/dd&#39;)
下面的语句是错误的,不能够正确匹配
select to_date(1000,&#39;yy/month/dd&#39;)
函数之间的嵌套
格式:F3(F2(F1(arg0,arg1),arg2),arg3)
先把&#39;hello&#39;和&#39;world&#39;连接起来,再转换为字母大写然后再从第4个字符开始,连着截取4个字符
select substr(upper(concat(&#39;hello&#39;,&#39;world&#39;)),4,4)
结果如下图所示:}

我要回帖

更多关于 excel select函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信