我有一个看起来像这样的SQL DateKey
YYYYMMDD
这是使用
创建的Convert(varchar,[ModifiedOn],112))
但是我想在视图中将此字段显示为英国的正常日期格式DD-MM-YYYY
我该怎么做。
谢谢。
答案 0 :(得分:2)
试试CONVERT(VARCHAR(10),CAST(YourStringDate AS DATE),105)
由于日期值YYYYMMDD
似乎是所谓的 unseparated format (而不是BIGINT
)中的字符串,因此SQL-Server会将此字符串转换为隐含地DATE
。 CONVERT
和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不是用于格式化的最好的语言,但有时它是唯一的语言。