[英]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
而且,一旦它成为date
, datetime
或其他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.