我将SchoolYear变量作为INT,并且我试图为此设置一个变量:
SET @BeginDate = '07/01/' + CONVERT(VARCHAR(4), @SchoolYear - 1)
它给我“将数据类型varchar转换为日期时出错”错误。
示例:
@SchoolYear INT = 2019,
@BeginDate日期-空
所需结果:
07/01/2018
我在做什么错了?
答案 0 :(得分:3)
答案 1 :(得分:2)
SQL服务器根本无法理解您使用的格式。
在varchar列/变量中处理日期时,最好使用与语言无关的日期格式。
yyyyMMdd
是这种格式,无论您的服务器上使用什么区域设置,它都将始终有效。
另请参阅此http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
您应该使用
SET @BeginDate = CONVERT(VARCHAR(4), @SchoolYear - 1) + '0107'
假设01是月份,而07是一天,那么您最终得到20180107
最好避免这样转换时避免varchar完成
set @BeginDate = DATEFROMPARTS(@SchoolYear - 1, 1, 7)
答案 2 :(得分:1)
也许您应该使用yyyy-mm-dd格式并将其设置更改为:
SET @BeginDate = CONVERT(VARCHAR(4), @SchoolYear - 1)+ '-01-07'
答案 3 :(得分:1)
Declare @SchoolYear int
Set @SchoolYear = 2019
Declare @BeginDate varchar(50)
SET @BeginDate = '07/01/' + CONVERT(VARCHAR(4), @SchoolYear - 1)
--Once You have you varchar populated, you can use Convert Function to convert
--to datetime and select the format you want
Select CONVERT (Datetime,@BeginDate, 101)