我的日期格式为 dd.mm.yyyy E.x. 2016年5月29日。我想将它选为DATE,但是当我尝试以下操作时出现错误:
CAST([PublishedDate] AS DATE) AS PublishedOn
从字符串转换日期和/或时间时转换失败。
阅读this我尝试了以下内容:
CONVERT(VARCHAR(10), [PublishedDate], 126) AS PublishedDate
但它并没有改变格式。 如何选择以YYYY-MM-DD格式进行选择。
编辑:我有3个不同的日期字段,所有三个都有不同的格式:dd.mm.yyyy | yyyy-mm-dd | YYYY / MM / DD。我想以相同的格式选择所有这些。由于我使用此查询来构建报告,现在我有不同格式的日期。执行以下操作:
CONVERT(VARCHAR(10), [PublishedDate], 104) AS PublishedOn
CONVERT(VARCHAR(10), [ValidFromDate], 104) AS ValidFrom
答案 0 :(得分:4)
您应该使用正确的format,在您的情况下,它应该是:
CONVERT(date, [PublishedDate], 104) AS PublishedDate
此外,一旦它处于date
,datetime
或其他日期数据类型,它就根本没有格式。
编辑:在date
数据类型中获得值后,您当然可以重新转换为varchar
以获得所需日期的直观表示。< / p>
edit2 :如果您需要date
数据类型,则应转换为日期:CONVERT(DATE, [your column], [your format])
。
如果您需要nvarchar
数据类型,则应转换为nvarchar:CONVERT(nvarchar(x), [your column], [your format])
。
您希望以特定格式显示nvarchar
,因此您应先转换为日期,然后再转回varchar
(我怀疑您需要unicode):
CONVERT(VARCHAR(10), CONVERT(date, [PublishedDate], 104), 126)
您必须为当前格式不同的列更改104
。
目前最好的解决方案是将数据类型更改为date
。这是一些工作,但绝对值得。
答案 1 :(得分:1)
如果你真的想要字符串,请执行以下操作:
CONVERT(char(10), CONVERT(date,[date], 104),126) AS PublishedDate
使用104格式(dd.mm.yyyy)将字符串转换为日期,因为它是您的原始格式,然后使用126格式(yyy-mm-dd)将日期转换为字符串
答案 2 :(得分:1)
如果您有更新版本的SQL Server,可以尝试
SELECT COALESCE(TRY_CAST(adate AS DATE), TRY_convert(DATE, adate, 126), TRY_convert(DATE, adate, 104)), format
FROM (
VALUES ('26.04.2017', 'dkformat') ,
('01.01.2017', 'EU format'),
('12.12.12', 'unknown format')
) a(aDate, format)
但是当你试图猜测你的来源是什么格式的时候,你正走下了一条危险的道路。去过那里,做过那件T恤。
我仍然讨厌0.1%的错误转换。
此解决方案将导致NULL,因此您可以看到转换未成功的位置。