将数据类型varchar转换为将int year转换为字符串的日期时出错

时间:2018-10-22 14:47:02

标签: sql sql-server tsql

我将SchoolYear变量作为INT,并且我试图为此设置一个变量:

SET @BeginDate = '07/01/' + CONVERT(VARCHAR(4), @SchoolYear - 1)    

它给我“将数据类型varchar转换为日期时出错”错误。

示例:

@SchoolYear INT = 2019,

@BeginDate日期-空

所需结果:

07/01/2018

我在做什么错了?

4 个答案:

答案 0 :(得分:3)

签出DATEFROMPARTS(可从SQL 2012获得),并完全绕过字符串。

,

第一个参数=年,第二个=月,第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)