我正在尝试将INT(YYYYMM)值转换为DATE。
我读过一些文章,其中提到从char转换为日期格式。因此,我很想知道-哪一个。是个好方法吗?
示例:
DECLARE @PERIOD INT ='201806'
SELECT CAST(CONCAT(@Period,'01') AS DATE) SQLCAST1
,CAST(CAST(@Period AS varchar(6))+'01' AS DATE) SQLCAST2
哪种方法理想?为什么?我们还有其他更好的方法吗?
答案 0 :(得分:5)
我不喜欢隐式数据类型转换,因此我将第一个表达为:
select convert(date, convert(varchar(6), @PERIOD ) + '01')
或使用datefromparts()
这是用于构造日期的内置函数:
select datefromparts( @PERIOD / 100, @PERIOD % 100, 1)
答案 1 :(得分:0)
这是另一种方法,首先必须转换为char然后转换为日期时间,
declare @intValue int
select @intValue = 201907
select convert(date, convert(varchar(6), @intValue ) + '01')
答案 2 :(得分:0)
显然concat是最有效的方法。
https://raresql.com/2013/03/12/sql-server-string-concatenation-faster-method/
Cast似乎也是解析标准日期字符串的最有效方法(请参见dateTime的try_cast时间)
您的第一种方法最有效。