将日期转换为 SQL 日期时间

Posted

技术标签:

【中文标题】将日期转换为 SQL 日期时间【英文标题】:Convert date to SQL datetime 【发布时间】:2014-08-26 17:42:07 【问题描述】:

我对 T-SQL 有点陌生,尽管阅读了许多表明这应该可以工作的文章,但我在将当年 10 月 1 日转换为日期时间时遇到了麻烦。

我试过了:

SELECT CAST(DATEPART(year, GETDATE()) + '1015' AS DATETIME)

SELECT CONVERT(datetime, 'Oct 15 ' + DATEPART(YEAR,GETDATE()),100)

还有各种变化。

有什么想法吗?我需要将日期时间变量设置为当年的 10 月 1 日。

【问题讨论】:

您提到 10 月 1 日,但参考 10 月 15 日。是哪个? 这个由MSDN documentation直接回答。 抱歉,现在是 10 月 15 日。今年 12 月 7 日我还需要一个。但我认为这两个例子都差不多。 Best way to parse DateTime to SQL server的可能重复 Pheonixblade,我理解你的评论,但我的意思是我试图遵循它无济于事。感谢您的帮助。 【参考方案1】:

你想要的很接近,但 DATEPART 返回一个数字,所以“+”是做加法,而不是连接。

试试这样:

SELECT CAST(CAST(DATEPART(year, GETDATE()) AS VARCHAR(4)) + '1015' AS DATETIME)

edit -- Ed 打败了我,Concat 功能也更好。

但如果你真的想把它赶出公园,试试这个......

SELECT DATEADD(month, 9, DATEADD(year, DATEDIFF(year, 0, getdate()), 0)) As October1CurrentYear

无需投射!

【讨论】:

+1 你的回答也是正确的,因为CONCAT 函数只能从SQL Server 2012 开始使用【参考方案2】:

您的第一个查询非常接近。问题是用于连接的加号 (+) 实际上是给您一个数值,您不能将其转换为日期。

要连接年份和“1015”并以字符串结尾,请改用CONCAT 函数:

SELECT CAST(CONCAT(DATEPART(YEAR, GETDATE()), '1015') AS DATE)

【讨论】:

非常感谢,埃德。其他建议似乎相反(日期到字符串),SQL 中的连接内容有点学习曲线,与 VB 非常不同。

以上是关于将日期转换为 SQL 日期时间的主要内容,如果未能解决你的问题,请参考以下文章

将日期转换为 SQL 日期时间

sql字符串转换日期

sql将字符串转换为日期/日期时间

sql日期格式转换

SQL - 将 varchar 转换为日期时间

Presto SQL - 将日期字符串转换为日期格式