Ⅰ sql语句如何根据出生日期计算年龄
第一种:
一张人员信息表里有一人生日(Birthday)列,跟据这个列,算出该人员的年龄
datediff(year,birthday,getdate())
例:birthday = '2003-3-8'
getDate()= '2008-7-7'
结果为:5
这样结果是会返回该人员的大概年龄,但不精确.不会精确到月或日.
按照上面测试的日期,该人员的实际年龄应该还不满5岁。在需要精确年龄的时候,就会有错.
第二种:
FLOOR(datediff(DY,birthday,getdate())/365.25)
FLOOR函数:
FLOOR(expr) 返回小于或等于expr的最大整数.FLOOR(1.1)返回1,FLOOR(-1.1)返回-2,FLOOR(1)返回1
这样就可以精确算出,该人员当前实际年龄了.
测试:
birthday = '2000-7-8'
getdate()= '2007-7-7'
算出结果为:6
在Oracle中,要获得日期中的年份,例如把sysdate中的年份取出来。
一种常用的方法是:to_number(to_char(sysdate,'yyyy'))
还有一种更好的方法,那就是使用oracle提供的Extract函数,使用方法是:
extract(year from sysdate) ,此方法获得的结果是数值型的 ,这种方法省掉了类型转换,更加简洁。
相应的,要取得月份或日,可以用extract (month from sysdate) 和extract (day from sysdate)
Ⅱ sql extract什么意思
select datepart(month,getdate())
提取当前月份
如果从表里字段中提取月份
select datepsrt(month,[日期字段]) FROM [表名]
Ⅲ 请举例说明在sql中如何获取日期字段中的月份(oracle下)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from al;
运行上边这个
sysdate是当前日期时间
yyyy是年,四位
mm是月份,二位
dd是日期。二位
hh24是以24小时算小时
mi是分钟
ss是秒
这个就取出来了,不知道你哪不懂呢?
Ⅳ 关于sql提取月份(extract的用法)
ORACLE范例:
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;// return Current Year
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; //return Current Month
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL; //return Current Day
SELECT EXTRACT(HOUR FROM SYSDATE) FROM DUAL;//Error
SELECT EXTRACT(HOUR FROM TIMESTAMP '2005-10-10 10:10:10') FROM DUAL;// Correct
SELECT EXTRACT(MINUTE FROM SYSDATE) FROM DUAL;//Error
SELECT EXTRACT(MINUTE FROM TIMESTAMP '2005-10-10 10:10:10') FROM DUAL;// Correct
以上是EXTRACT()函数的使用说明,有个很重要的部分.就是extract 抽取年月日部分和时分部分的使用方法是不同的.
EXTRACT(YEAR FROM SYSDATE)中FROM 的下一个参数是日期类型的时候可以抽取年月日.就是说这个参数是日期类型的时候就可以抽取年\月\日,而抽取不了时\分部分.抽取时分部分得在FROM 后面加带TIMESTAMP 且后面加时间字符.
这里要注意,在(MINUTE FROM TIMESTAMP '2005-10-10 10:10:10')中,如果把'2005-10-10 10:10:10'用日期类型的字段来代替并转换成字符类型后,也是错误的,估计是这方法的问题.
比如(MINUTE FROM TIMESTAMP to_date(to_char(日期类型,'YYYY-MM-DD hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss')),这样执行不了的.
如果真要从日期类型的字段中抽取时\分部分用to_char() 函数就可以了.比如to_char(日期类型,'hh24:mi')
Ⅳ 运行下面的SQL语句时出错了,出错地方:extract(month from to_date(t.TASK_STARTDATE,'yyyy
extract(month from 后边应该直接跟日期格式就可以,你的t.TASK_STARTDATE字段类型不是date???改成:
extract(month fromt.TASK_STARTDATE)= '12'
Ⅵ sql数据库中字段为文本类型比如(2012-02-18),现在想筛选所有小于当前日期的数据(之筛选月日)
把文本类型转化成时间类型再比较就行吧
convert(datetime,字段名,120)<convert(datetime,'2012-2-18',120)
只筛选月日,不计算年的话,可以用sunstring把表中所有文本时间都赋成同一年的,再比较
Ⅶ SQL如何取年月
1、首先大部分都会使用的就是获取当前日期了,getdate直接用。
Ⅷ 请教pgsql中时间,统计相关的函数,如date
1.获取系统时间函数
select now(); --2012-05-12 18:51:59.562+08
select current_timestamp; --2012-05-12 18:52:12.062+08
select current_date; --2012-05-12
select current_time; --18:53:23.234+08
2.时间的计算
--使用interval
select now()+interval '2 day'; --2012-05-14 20:05:32.796+08 2天后
select now()-interval '2 day'; --2012-05-10 20:07:23.265+08 2天前
select now()+interval '2 hour'; --2012-05-12 22:06:38.375+08 2小时后
....
interval可以不写,其值可以是
Abbreviation Meaning
Y Years
M Months (in the date part)
W Weeks
D Days
H Hours
M Minutes (in the time part)
3.时间的截取
--使用extract extract(interval,timestamp);
select extract(year from now()); --2012
select extract(mon from now()); --5 5月份
...
interval值参考上面
4.时间的转换
select timestamp '2012-05-12 18:54:54'; --2012-05-12 18:54:54
select date '2012-05-12 18:54:54'; --2012-05-12
select time '2012-05-12 18:54:54'; --18:54:54
select TIMESTAMP WITH TIME ZONE '2012-05-12 18:54:54'
--2012-05-12 18:54:54+08
--与unix时间戳的转换
SELECT TIMESTAMP 'epoch' + 1341174767 * INTERVAL '1 second';
--2012-07-01 20:32:47
Ⅸ sql获取当前日期的日
oracle中实现如下:
1、查询当前日期的天数
select
sysdate
as
当前时间,extract(day
from
sysdate)
as
天数
from
daul;
2、查询当前日期前7天
select
to_char(sysdate-7,'yyyy-mm-dd
')||'00:00:00'
start_time,to_char(sysdate-7,'yyyy-mm-dd
')||'23:59:59'
end_time
from
al
3、查询当前日期前30天
select
to_char(sysdate-30,'yyyy-mm-dd
')||'00:00:00'
start_time,to_char(sysdate-30,'yyyy-mm-dd
')||'23:59:59'
end_time
from
al