将 Decimal 或 Varchar 转换为日期

Convert Decimal or Varchar into Date

我有 2 个字段。

出生= 数据类型十进制 (12,4) & 日期 = 数据类型日期

Birth         Date 
19650101   2015-07-09  

我怎样才能得到这样的结果

我想要这样的结果

Birth             Date          
1965-01-01       2015-07-09       

其中出生是日期数据类型而不是小数 (12,4)

你可以使用这个:

-- Create demo data
CREATE TABLE #dates(birth int, date date)

INSERT INTO #dates(birth,date)
VALUES(19650101,N'2015-07-09')

-- Your work
SELECT CONVERT(date,CONVERT(nvarchar(max),birth),112) as birth, date, 
        DATEDIFF(year,
            CONVERT(date,CONVERT(nvarchar(max),birth),112),
            date
        ) as years
FROM #dates

-- Cleanup
DROP TABLE #dates

这取决于您提供的确切格式 (19650101)。

要将数字 19650101 转换为日期,请使用

CONVERT(DATETIME, CAST(Birth AS VARCHAR(8)), 112)

要获取年数(精确到小数点后一位),您可以这样做:

ROUND(
    DATEDIFF(day,
         CONVERT(DATETIME, CAST(Birth AS VARCHAR(8)), 112),
         [Date])/365.25
     ,1)

这并不准确,但应该足够接近一年的十分之一。

这是进行此转换的一种方法。

cast(cast(FLOOR(birth) as CHAR(8)) as DATE)

我觉得你不需要四舍五入。只需转换您的十进制值并输入“-”,如下所示:)

select left(birth,4) +'-' + 
substring(convert(nvarchar,birth),5,2)+'-'+ 
substring(convert(nvarchar,birth),7,2)