SQL DateKey到正常日期

时间:2016-11-14 14:41:57

标签: sql sql-server

我有一个看起来像这样的SQL DateKey

YYYYMMDD

这是使用

创建的
Convert(varchar,[ModifiedOn],112))

但是我想在视图中将此字段显示为英国的正常日期格式DD-MM-YYYY

我该怎么做。

谢谢。

3 个答案:

答案 0 :(得分:2)

试试CONVERT(VARCHAR(10),CAST(YourStringDate AS DATE),105)

由于日期值YYYYMMDD似乎是所谓的 unseparated format (而不是BIGINT)中的字符串,因此SQL-Server会将此字符串转换为隐含地DATECONVERT和105一起将按您希望的方式格式化。

从SQL Server 2012开始,有FORMAT()。你可以用这个:

SELECT FORMAT(CAST(YourStringDate AS DATE),'dd-MM-yyyy')

答案 1 :(得分:0)

一种方法省去了日期,只使用字符串算法:

select (right(ModifiedOn, 2) + '-' +
        substring(ModifiedOn, 3, 2) + '-' +
        left(ModifiedOn, 4)
       ) as mmddyyyy

答案 2 :(得分:0)

一种方法是在数据库中添加date table

日期表可以提供方便的预先计算格式选择,供您切换。

它们也是有用的聚合目标(GROUP BY DATENAME(QUARTER, CAST(DateKey AS DATE)) Vs GROUP BY DimDate.[Quater])。

-- Basic date table.
CREATE TABLE DimDate
    (
        DateKey         INT         PRIMARY KEY,
        [Date]          DATE        NOT NULL,
        [Year]          INT         NOT NULL,
        [Quater]        VARCHAR(2)  NOT NULL,
        [DD_MM_YYYY]    VARCHAR(10) NOT NULL,
    )
;

包含:

DateKey     [Date]      [Year]  [Quater]    [DD_MM_YYYY]
--------------------------------------------------------
20160101    2016-01-01  2016    Q1          01-01-2016
20160102    2016-01-02  2016    Q1          02-01-2016
...
20161231    2016-12-31  2016    Q4          31-12-2016

在数据库中存在反对格式化的争论。辅音将告诉您格式化是一种整容操作,最好在表示层执行。他们说,你的数据库应该只存储冷酷的事实。就个人而言,我不太确定。我同意SQL不是用于格式化的最好的语言,但有时它是唯一的语言。