0

我有一些以 varchar(10) 格式存储的日期。

日期是这样的:

2008-01-06
2008-01-13
2008-01-20
2008-01-27
2008-02-03
2008-02-10
2008-02-17
2008-02-24

我希望它们采用 dd/mm/yyyy 格式(也是 DATE 数据类型)

我尝试了以下方法:

SELECT CONVERT(VARCHAR(max), startWeek, 103) date
FROM dbo.GoogledataFinal

为什么会这样输出:

2008-01-06
2008-01-13
2008-01-20
2008-01-27
2008-02-03
2008-02-10
2008-02-17

如果你能修复我的代码会很棒,但我对为什么会发生这种行为更感兴趣,所以像我 5 岁那样解释可能会有所帮助。

4

4 回答 4

5

您正在从 转换varcharvarchar。style 参数甚至不用于此。

相反,转换为date,然后返回varchar

select convert(varchar(10), cast('2008-01-06' as datetime), 103)

这打印:

06/01/2008
于 2012-10-31T11:31:44.487 回答
2
SELECT CONVERT(varchar(10), CONVERT(datetime, startWeek), 103) date
FROM dbo.GoogledataFinal
于 2012-10-31T11:31:19.857 回答
0

您需要将 varchar 转换为日期时间,然后使用所需格式返回 varchar:

SELECT CONVERT( varchar(10), 
         CONVERT(DATETIME, '2008-02-03', 120) -- Varchar "yyyy-mm-dd" to Datetime
       , 103) -- Datetime to Varchar "dd/mm/yyyy"

对于您的情况,SQL 可能是:

SELECT CONVERT( varchar(10), 
         CONVERT(DATETIME, startWeek, 120)
       , 103)
FROM dbo.GoogledataFinal
于 2012-10-31T11:38:37.537 回答
0

尝试这个:

SELECT (SUBSTRING (startWeek,9, 2) + '/' + SUBSTRING (startWeek,6, 2) + '/' SUBSTRING (startWeek,1, 4))  AS date
FROM dbo.GoogledataFinal
于 2012-10-31T11:36:04.173 回答