如何插入今年的日期,即30/7 / CurrentYear

时间:2019-05-16 08:32:02

标签: sql sql-server date

我想编写一个脚本,该脚本将一致地插入月份和日期,但使用当前年份。我已经尝试过了:

DECLARE @startDateVar DATETIME = '31/7/'+year(getdate())

但是它不会出错

  

将varchar值'31 / 7 /'转换为数据类型int时转换失败。

理想情况下,我可以捕获当前年份并将其传递给DATETIME变量的构造函数。最好的方法是什么?

4 个答案:

答案 0 :(得分:1)

使用正确的日期格式YYYY-MM-DD避免歧义,并使用CONCAT()将字符串连接在一起(由于YEAR()返回一个int,因此您需要使用{{1} }进行连接,或将其强制转换为字符串,然后再将其添加到其他字符串中。

CONCAT()

答案 1 :(得分:1)

您可以使用DATEFROMPARTS

SELECT DATEFROMPARTS(YEAR(GETDATE()),7,31);

答案 2 :(得分:0)

SELECT GETDATE()将以2019-05-16 08:35:03.257的形式返回,因此,如果您以yyyy-mm-dd格式分配值,它将接受。

因此,将CONCAT()yyyy-mm-dd格式一起使用会有所帮助:

DECLARE @startDateVar DATETIME = CONCAT(year(getdate()), '-07-31')
SELECT @startDateVar

输出将为2019-07-31 00:00:00.000

答案 3 :(得分:0)

dd/mm/yyyy的格式不确定,如果当天是6,该怎么办?美国格式会将其设置为7/6,而不是6/7。最好使用yyyy-mm-dd,因为这毫无疑问。

第二,出现错误的原因是因为您的SQL试图将31/7/转换为int而不是将int转换为varchar。

will work though

DECLARE @startDateVar DATETIME = CAST(year(getdate()) AS VARCHAR(4))+'-07-31'