Sql server 如何在SQL Server 2008中将日期格式yyyymmdd转换为yyyy/mm/dd

Sql server 如何在SQL Server 2008中将日期格式yyyymmdd转换为yyyy/mm/dd,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我尝试了一些转换,但似乎不起作用。我的数据类型是十进制的: date_column ----------- 20140619 20160527 20150601 20131127 20170217 20171204 20160519 我的SQL语句: SELECT CONVERT(DATE, CONVERT(VARCHAR(10), date_column), 111) AS mydate FROM my_table 结果 mydate ------------- 2014-

我尝试了一些转换,但似乎不起作用。我的数据类型是十进制的:

date_column
-----------
20140619
20160527
20150601
20131127
20170217
20171204
20160519
我的SQL语句:

SELECT
    CONVERT(DATE, CONVERT(VARCHAR(10), date_column), 111) AS mydate
FROM
    my_table
结果

mydate
-------------
2014-06-19
2016-05-27
2015-06-01
2013-11-27
2017-02-17
2017-12-04
2016-05-19
您当前正在执行以下操作:

decimal -> varchar -> date
这很好,但您仍然缺少一个步骤:

decimal -> varchar -> date -> varchar (new format)
因此,您需要:

select CONVERT(varchar(10), CONVERT(date, CONVERT(varchar(8), date_column)), 111) as mydate
from my_table


(实际上,您应该首先将日期存储为
日期,但我知道,对于传统数据库来说,这并不总是一个选项。)

您可以根据自己的偏好尝试以下任一代码

后SQL SERVER 2012

declare @testDate DATE;
SET @testDate = '20140619'

SELECT FORMAT ( @testDate, 'd', 'zh-cn' ), FORMAT( @testDate, 'yyyy/MM/dd', 'en-US' )
declare @testDate DATE;
SET @testDate = '20140619'

SELECT REPLACE(CAST(CONVERT(date,'20140619',111) AS CHAR(10),'-','/')
SELECT convert(char(10),@testDate,111)
SQL SERVER 2012之前的版本

declare @testDate DATE;
SET @testDate = '20140619'

SELECT FORMAT ( @testDate, 'd', 'zh-cn' ), FORMAT( @testDate, 'yyyy/MM/dd', 'en-US' )
declare @testDate DATE;
SET @testDate = '20140619'

SELECT REPLACE(CAST(CONVERT(date,'20140619',111) AS CHAR(10),'-','/')
SELECT convert(char(10),@testDate,111)

让我分享一些我得到的答案:

选择格式(转换(日期列为日期),'yyyy/MM/dd')作为mydate 从我的桌子上

选择convert(日期,convert(varchar(10),date_列),111)作为mydate 从我的桌子上


谢谢

。您应该将日期存储在
date
列中,这些列没有格式。@Damien_不信者虽然我很欣赏选择正确的数据类型是非常明智的,但从这个问题来看,没有迹象表明这些数据没有以正确的格式存储以供使用。相反,这可能涉及在登台环境中解析出必要的数据字段,以确保在加载到生产环境中时值的格式正确。简单地说,我不认为你的评论在这个例子中是有建设性的。@iamdave-你是对的,我们不知道这里的确切上下文。我要补充的是,我在这里看到了很多问题,人们要么认为
date
有格式,要么认为他们的数据应该是符合特定格式的日期的字符串版本,而事实证明他们这样做只是因为这是他们想向应用程序用户显示的格式。我同意,但是这个数据库是很久以前开发的。我得到了这个错误……不允许从数据类型decimal显式转换为date。@MiehleketoMathebula:那么看起来你在骗我们。:-)在您的问题中,您提到您的数据类型是
varchar
,而错误消息声称数据类型是
decimal
。请找出您的实际数据类型。谢谢,我从您上次的语句“不允许从数据类型decimal显式转换为date”中得到此错误