【发布时间】:2016-03-31 16:24:00
【问题描述】:
我的数据中有一个列充满了“日期”,其格式类似于030816,并且数据类型为 Varchar。我整个上午都在尝试将此数字转换为03/08/2016 的日期格式。我似乎没有做任何事情给我想要的结果。这是我尝试过的:
- 我将列数据类型从 Varchar 更改为 Date。这导致了更可接受的日期格式,但也导致完全更改日期。在此转换后,本应为
03/08/2016的日期最终变为2003-08-16。 - 我尝试将数据类型保留为 Varchar,并在构建我的选择查询时使用
Convert(Varchar(10),Bill_Date,103),但这没有导致任何变化,并继续将结果显示为030816 - 我也尝试使用
Cast(Bill_Date AS Date),但这也为我提供了2003-08-16的结果,这又不是正确的日期。 - 最后,我尝试了
Format(Bill_Date,'MM/DD/YYYY'),但这给了我一条错误消息,声称 Argument 数据类型 Varchar 对于该参数无效。
有没有办法让 SQL 将此数字字符串转换为我需要的日期格式,或者至少有一种方法可以在选择查询中显示数字字符串,这将为我提供所需的格式?
【问题讨论】:
-
DATE和DATETIME数据类型没有格式,它们只是根据区域设置以某种方式显示结果。你真的想要DD/MM/YYYY格式的varchar,还是实际的DATE?。你怎么知道030816是03/08/2016而不是03/08/1916或03/08/2116? -
您是否尝试使用 SUBSTRING 来组成 ISO8601 格式的日期字符串?另见 CONVERT(datetime, @val, 126)
-
那你就可以
SELECT LEFT(YourColumn,2) + '/' + SUBSTRING(YourColumn,3,2) + '/20' + RIGHT(YourColumn,2) -
绝对最好的解决方法是停止将日期存储在 varchar 列中。将“日期”存储为 varchar 是令人难以置信的问题。有太多的事情可能会出错。然后你会遇到现在面临的挑战。如果将其存储为日期,则根本没有问题。当然,任何格式都真正属于前端,而不是 sql server。
-
@SeanLange 这就是我不想发布答案的原因 ;-)
标签: sql sql-server