日期:2014-05-17  浏览次数:20706 次

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天
decla