将Decimal或Varchar转换为Date

时间:2015-07-09 13:43:05

标签: sql sql-server date casting converter

我有两个字段。

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

Birth         Date 
19650101   2015-07-09  

我如何得到一个看起来像这样的结果

我希望结果像这样

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

其中Birth是Date数据类型而不是小数(12,4)

4 个答案:

答案 0 :(得分:2)

要将号码19650101转换为使用日期

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

要获得年数(小数点后一位),您可以这样做:

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

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

答案 1 :(得分:1)

您可以使用:

-- 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)。

答案 2 :(得分:1)

我认为你不需要回合。只需转换您的小数值并将“ - ”如下所示:)

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

答案 3 :(得分:0)

以下是执行此转换的一种方法。

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