将数据类型 varchar 转换为日期时将 int 年份转换为字符串时出错
Posted
技术标签:
【中文标题】将数据类型 varchar 转换为日期时将 int 年份转换为字符串时出错【英文标题】:Error converting data type varchar to date converting an int year into a string 【发布时间】:2018-10-22 14:47:01 【问题描述】:我有 SchoolYear 变量作为 INT,我正在尝试为此设置一个变量:
SET @BeginDate = '07/01/' + CONVERT(VARCHAR(4), @SchoolYear - 1)
它给了我“将数据类型 varchar 转换为日期时出错”错误。
示例:
@SchoolYear INT = 2019,
@BeginDate 日期 - NULL
期望的结果:
2018 年 7 月 1 日
请问我做错了什么?
【问题讨论】:
尝试设置成格式'yyyy-mm-dd' @jm1 尝试将@BeginDate 数据类型更改为DATE
。
@iSR5,BeginDate 是一个日期,我更新了问题。感谢您的帮助。
@JM1 执行此SELECT GETDATE()
并检查它的日期格式,您应该使用与GETDATE()
中相同的日期格式
【参考方案1】:
查看DATEFROMPARTS(可从 SQL 2012 获得),并完全绕过字符串。
SET @BeginDate = DATEFROMPARTS(@SchoolYear - 1, 1, 7)
第一个参数 = 年,第二个 = 月,第三个 = 日。
【讨论】:
【参考方案2】:你使用的格式根本不被你的 sql server 理解。
在处理 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)
【讨论】:
【参考方案3】:也许您应该使用 yyyy-mm-dd 格式并将集合更改为:
SET @BeginDate = CONVERT(VARCHAR(4), @SchoolYear - 1)+ '-01-07'
【讨论】:
【参考方案4】: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)
【讨论】:
以上是关于将数据类型 varchar 转换为日期时将 int 年份转换为字符串时出错的主要内容,如果未能解决你的问题,请参考以下文章
将 varchar 值“Collect_Date”转换为数据类型 int 时转换失败
将 varchar 值“%”转换为数据类型 int 时转换失败
在sql中如何将日期类型转换成文本类型,例如2012-09-12 转变成 20120912
将 varchar 值“AND ID =”转换为数据类型 int 时转换失败
如何在 MySQL 中使用 Case When 和 Str_to Date 将 Varchar 日期值转换为日期数据类型