转换为DATE T-SQL

时间:2017-06-26 14:42:08

标签: sql tsql

我的日期格式为 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

给我以下output

3 个答案:

答案 0 :(得分:4)

您应该使用正确的format,在您的情况下,它应该是:

CONVERT(date, [PublishedDate], 104)  AS PublishedDate

此外,一旦它处于datedatetime或其他日期数据类型,它就根本没有格式。

编辑:在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,因此您可以看到转换未成功的位置。