Sql 是否将年数转换为dateName?
因此,我计算datediff,以年为单位,得到一个数值(例如:16.166666),将该值转换为日期名称的最佳解决方案是什么Sql 是否将年数转换为dateName?,sql,sql-server,Sql,Sql Server,因此,我计算datediff,以年为单位,得到一个数值(例如:16.166666),将该值转换为日期名称的最佳解决方案是什么 例如,16.166年将变成:16年零1个月 Declare @Value float= 16.166 Select Years = floor(@Value) ,Months = floor((@Value - floor(@Value)) * 12) ,OrAsStr = ltrim( replace(
例如,16.166年将变成:16年零1个月
Declare @Value float= 16.166
Select Years = floor(@Value)
,Months = floor((@Value - floor(@Value)) * 12)
,OrAsStr = ltrim(
replace(
replace(
concat(' ',floor(@Value),' Years ',floor((@Value - floor(@Value)) * 12),' Months')
,' 1 Years ',' 1 Year ')
,' 1 Months',' 1 Month')
)
返回
Years Months OrAsStr
16 1 16 Years 1 Month
根据你的评论
我有两个日期列,我需要找到日期差异,然后转换为字符串:例如:16年和1个月 你可以像我一样
DECLARE
@Start DATE = '2000-01-01',
@End DATE = '2016-02-01';
SELECT CAST(T.Years AS VARCHAR(10)) + ' Years and ' +
CAST(DATEDIFF(Month, @Start, DATEADD(Year, - T.Years, @End)) AS VARCHAR(2)) + ' Months.'
FROM
(
SELECT DATEDIFF(Year, @Start, @End) Years
) T;
或
返回
+------------------------+
| 16 Years and 1 Months. |
+------------------------+
在前端
DATEDIFF()
function returnINT
您最初是如何得到16.166666
的?我正在计算DATEDIFF的年数。。让我有点困惑,因为DATEDIFF()
返回INT
。接得好;)是的,我忘了加上我乘以1.0转换成数字。@Swazzy你想计算两个日期
列之间的差异吗?用整数将其分解然后串联是个好主意!肯定会用这个。再次感谢@John Cappelletti我有两个日期列,我需要找到日期差异,然后转换为字符串:例如:16年零1个月。。有道理吗@萨米人
+------------------------+
| 16 Years and 1 Months. |
+------------------------+