繁体   English   中英

转换为DATE T-SQL

[英]Convert to DATE T-SQL

我有一个日期格式为dd.mm.yyyy Ex 29.05.2016的字段。 我想选择DATE作为日期,但是尝试以下操作时出现错误:

CAST([PublishedDate] AS DATE) AS PublishedOn

从字符串转换日期和/或时间时转换失败。

阅读此内容后,我尝试了以下操作:

 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

给我以下 输出

您应该使用正确的格式 ,在这种情况下,应为:

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

而且,一旦它成为datedatetime或其他date数据类型,它就根本没有格式。

编辑 :一旦您的值在date数据类型中,您当然可以重铸到varchar以获得所需日期的直观表示。

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 这是一项工作,但绝对值得。

如果您真的想要字符串,请执行以下操作:

CONVERT(char(10), CONVERT(date,[date], 104),126)  AS PublishedDate

使用原始格式,使用104格式(dd.mm.yyyy)将字符串转换为日期,然后使用126格式(yyy-mm-dd)将日期转换为字符串。

如果您有较新版本的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,因此您可以查看转换失败的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM