Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否将年数转换为dateName?_Sql_Sql Server - Fatal编程技术网

Sql 是否将年数转换为dateName?

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(

因此,我计算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(
                 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 return
INT
您最初是如何得到
16.166666
的?我正在计算DATEDIFF的年数。。让我有点困惑,因为
DATEDIFF()
返回
INT
。接得好;)是的,我忘了加上我乘以1.0转换成数字。@Swazzy你想计算两个
日期
列之间的差异吗?用整数将其分解然后串联是个好主意!肯定会用这个。再次感谢@John Cappelletti我有两个日期列,我需要找到日期差异,然后转换为字符串:例如:16年零1个月。。有道理吗@萨米人
+------------------------+
| 16 Years and 1 Months. |
+------------------------+