将十进制转换为日期以使用DATENAME函数

时间:2016-08-02 00:02:04

标签: sql sql-server

使用ERP数据库(SQL Server)将日期存储为YYYYMMDD格式的十进制列 - 例如20160801。我需要将这些值转换为日期,以便我可以使用DATENAME函数来识别与每个日期对应的星期几。

或者,如果有另一种方法来推导一周中的某一天,我会全力以赴。查询的其余部分很简单......我只需要返回订单号,订单日期(存储为小数的列),以及与订单日期对应的星期几。

编辑(摘自评论)

我仍然遗失了一些东西,因为我得到了一个无法绑定的错误:

Select CAST(OEORDD.EXPDATE AS VARCHAR(8)) 
DECLARE @dec DECIMAL(10,0)=20160801; 
SELECT CAST(CAST(@dec AS VARCHAR(8)) AS DATE) , sum(OEORDD.EXTWEIGHT) as ExtWeight 
FROM OEORDD 
GROUP BY EXPDATE

3 个答案:

答案 0 :(得分:3)

有" unseparated"日期时间格式,本地可以使用。为此,您需要一个带有 yyyymmdd 的8个字母的字符串。

首先将十进制数转换为字符串:

CAST(YourDecimalValue AS VARCHAR(8))

然后把它投到日期:

DECLARE @dec DECIMAL(10,0)=20160801;
SELECT CAST(CAST(@dec AS VARCHAR(8)) AS DATE)

更新(关于你的评论)

你可能需要这样的东西:

SELECT  CAST(CAST(OEORDD.EXPDATE AS VARCHAR(8)) AS DATE) AS YourConvertedDate
       ,SUM(OEORDD.EXTWEIGHT) AS ExtWeight 
FROM OEORDD 
GROUP BY CAST(CAST(OEORDD.EXPDATE AS VARCHAR(8)) AS DATE)

答案 1 :(得分:2)

您可以将其用于文本或一周工作日数:

DECLARE @d DECIMAL = 20160801;
SELECT DATENAME(dw,CAST(CAST(@d as VARCHAR(8)) as DATE)),
    DATENAME(d,CAST(CAST(@d as VARCHAR(8)) as DATE)),
    @d;

答案 2 :(得分:0)

DECLARE @decimal DECIMAL(10,0)=20160801;
SELECT DATENAME(dw,CAST(convert(VARCHAR(8),@decimal) AS DATE))