注册 登录
编程论坛 SQL Server论坛

[求助]SQL里如何计算日期

青格儿 发布于 2007-10-14 11:51, 1963 次点击
创建一个员工表,里面有个计算列(工龄,它的类型是int),让它计算"当前计算机上的时间"减去"表中的工作的起始日期(startdate)",那么怎么写它的SQL语句

日期-日期不是等于一个日期,怎么转成int 如是要想让两日期相减后得到的是多少年多少天,那该怎么做?
13 回复
#2
青格儿2007-10-14 12:37
呵呵,摆弄了一会,终于出来了!

update employee
set gongling= datepart(year,getdate())-datepart(year,startdate)

这样就好了,但是datepart要求两个参数,怎么算天数?要想让gongling字段得"几年几天"这种形式,那该怎么办?
#3
purana2007-10-14 14:12
day就是天数了.
#4
青格儿2007-10-14 19:04
我知道 day就是天了,我是说让年和天一快显示出来,也就是说:
startdate :2000-9-14 如当前时间是:2007-10-14

gongling :7年30天 (如何让天和年一块显示出来,而不是只算天数,也就是让gongling列都显示成“多少年多少天”形式)

另,有时学号的前几位是固定的,如sss001,sss002 ……
我想在每次输学号时不用再输sss直接输001,002……(也就是打开表后sss就已显示了,只用填后三位就行了) 那怎么做?


#5
volte2007-10-15 09:04

天数个人认为把startdate的年份加上你计算出来的年份。与当前时间计算时间差就可以了
这是一种算法,也许有更好的算法。

第二个问题可以写个存储过程。写习惯了,所以第一眼就想到存储过程!

#6
purana2007-10-15 11:09
同意楼上.
#7
西风独自凉2007-10-15 11:37
datadiff
#8
西风独自凉2007-10-15 11:38

打錯了,是datediff

#9
西风独自凉2007-10-15 11:51

第二個問題就要看具體的年份了。。。

#10
青格儿2007-10-15 18:45
多谢各位朋友的回答,我才学SQL,可以给我具体写下SQL语句吗?谢谢!
#11
青格儿2007-10-15 18:52
多谢各位朋友的回答,我才学SQL,可以给我具体写下SQL语句吗?谢谢!
#12
西风独自凉2007-10-15 19:19
update employee
set gongling= datediff(day,startdate,getdate())
#13
胡桂生2007-10-16 12:58

create table employee
(
ID int primary key,
YG_NAME varchar(10),
SEX char(2) default '男',
STARTDATE datetime,
GONGLING int
)

insert into employee(id,yg_name,sex,startdate,gongling) values(11,'张三','男','2000-1-1',null)

update employee
set gongling = datediff(day,(select startdate from employee where id = 11),getdate())
/*datediff() 是系统函数,返回跨两个指定日期的日期和时间边界数,它有三个参数:第一个是要返回的日期的部分
(day,month,year)等,第二个是开始时期,第三个是结束时期*/

#14
胡桂生2007-10-16 13:15
以下是引用青格儿在2007-10-14 19:04:56的发言:
我知道 day就是天了,我是说让年和天一快显示出来,也就是说:
startdate :2000-9-14 如当前时间是:2007-10-14

gongling :7年30天 (如何让天和年一块显示出来,而不是只算天数,也就是让gongling列都显示成“多少年多少天”形式)

另,有时学号的前几位是固定的,如sss001,sss002 ……
我想在每次输学号时不用再输sss直接输001,002……(也就是打开表后sss就已显示了,只用填后三位就行了) 那怎么做?


你在创建表时,gongling这一属性的类型是int ,能显示“7年30天”么?

1