我想编写一个脚本,该脚本将一致地插入月份和日期,但使用当前年份。我已经尝试过了:
DECLARE @startDateVar DATETIME = '31/7/'+year(getdate())
但是它不会出错
将varchar值'31 / 7 /'转换为数据类型int时转换失败。
理想情况下,我可以捕获当前年份并将其传递给DATETIME
变量的构造函数。最好的方法是什么?
答案 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。
DECLARE @startDateVar DATETIME = CAST(year(getdate()) AS VARCHAR(4))+'-07-31'