首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL中年月日类型的日期如何转成天数

2013-10-14 
SQL中年月日类型的日期怎么转成天数RTsql中 比如现在给的时间是1年2月3天怎么转换成428天。[解决办法]分平

SQL中年月日类型的日期怎么转成天数
RTsql中 比如现在给的时间是1年2月3天  怎么转换成428天。
[解决办法]
分平年闰年不?
[解决办法]


select floor(365*(1+2./12))+3

[解决办法]

declare @x varchar(100)

select @x='1年2月3天'

select cast(substring(@x,1,charindex('年',@x,1)-1) as int)*365
       +cast(substring(@x,charindex('年',@x,1)+1,charindex('月',@x,1)-charindex('年',@x,1)-1) as int)*30
       +cast(substring(@x,charindex('月',@x,1)+1,charindex('天',@x,1)-charindex('月',@x,1)-1) as int) '天数'

/*
天数
-----------
428

(1 row(s) affected)
*/

[解决办法]
DECLARE @s VARCHAR(100)
SET @s='1年2月3天'

SELECT 
    SUBSTRING(@s,1,CHARINDEX('年',@s)-1)*365+
SUBSTRING(@s,CHARINDEX('年',@s)+1,CHARINDEX('月',@s)-1-CHARINDEX('年',@s))*30+
SUBSTRING(@s,CHARINDEX('月',@s)+1,CHARINDEX('天',@s)-1-CHARINDEX('月',@s))

/*-----------
428

(1 行受影响)*/

[解决办法]
SELECT DATEDIFF(d,'0001-01-01','0001-02-03')

[解决办法]
那个2月是只随机的两个月还是指2月份?我觉得如果是随机的,那么这个转换没什么意义
[解决办法]
看你计算的结果,年不分平、闰年,月也不分30、31天
select 1*365+2*30+3?
[解决办法]
select convert(int,convert(datetime,'1901-02-03')) + 1
[解决办法]
引用:
看你计算的结果,年不分平、闰年,月也不分30、31天
select 1*365+2*30+3?


这个好, 最直接!
[解决办法]
这个设定确实有问题,因为即使不分平润年,月份也是要分的,28天,30天还是31天。
所以之中转化本身没有多大的意义,或者楼主可以把自己的问题再说清楚一些。
[解决办法]
楼主的转换太奇葩了,还是想想到底要干嘛,datediff 还不能满足楼主吗?
[解决办法]
select Datediff(d,getdate(),(select Dateadd(d,日,(select Dateadd(mm,月,(select Dateadd(yy,年,getdate())))))))  
[解决办法]
昨天有一同事问:怎么获取指定年份的一月份的第一天。
比如2013年的第一天怎么获取,

[解决办法]
应该可以写一个比较简单的函数来弄

[解决办法]
引用:
昨天有一同事问:怎么获取指定年份的一月份的第一天。
比如2013年的第一天怎么获取,


--固定1月份第1天
declare @year int
set @year = 2013
select convert(datetime,(convert(nvarchar(10),@year) + '-01-01'))

[解决办法]
引用:
Quote: 引用:

昨天有一同事问:怎么获取指定年份的一月份的第一天。
比如2013年的第一天怎么获取,


--固定1月份第1天
declare @year int
set @year = 2013
select convert(datetime,(convert(nvarchar(10),@year) + '-01-01'))


刚说完一会儿,他笑了
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

昨天有一同事问:怎么获取指定年份的一月份的第一天。
比如2013年的第一天怎么获取,


--固定1月份第1天
declare @year int
set @year = 2013
select convert(datetime,(convert(nvarchar(10),@year) + '-01-01'))


刚说完一会儿,他笑了

这是简单又固定的,不太可能运用现实中
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

昨天有一同事问:怎么获取指定年份的一月份的第一天。
比如2013年的第一天怎么获取,


--固定1月份第1天
declare @year int
set @year = 2013
select convert(datetime,(convert(nvarchar(10),@year) + '-01-01'))


刚说完一会儿,他笑了


--只能这样啦
alter FUNCTION [dbo].[f_table]


(
@year int
)
returns datetime 
as
begin
declare @yearwage datetime
set @yearwage = convert(datetime,(convert(nvarchar(10),@year) + '-01-01'))
return (@yearwage)
end
go
select [dbo].[f_table](2015) as mydate



[解决办法]

--只能这样啦
create FUNCTION [dbo].[f_table]
(
@year int
)
returns datetime 
as
begin
declare @yearwage datetime
set @yearwage = convert(datetime,(convert(nvarchar(10),@year) + '-01-01'))
return (@yearwage)
end
go
select [dbo].[f_table](2015) as mydate

热点排行