Sql 将varchar变量转换/获取为YYYYMM

Sql 将varchar变量转换/获取为YYYYMM,sql,sql-server,sql-server-2008,type-conversion,Sql,Sql Server,Sql Server 2008,Type Conversion,此表中有4个CTE,第三个包含转换为VARCHAR的日期时间(格式根据需求而定),格式为startDate,格式为DD/MM/YYYY。最后一个cte根据生成的数据进行计算,其中一列需要根据startDate存储YYYYMM日期 问题是它从转换后的日期时间中获取年份和月份,使用convert()它显示: IDPER ------- 01/01/ --DD/MM/ 当startDate未转换时,这两个选项正确显示YYYYMM: Select *, left(convert(nvarchar(6)

此表中有4个CTE,第三个包含转换为VARCHAR的日期时间(格式根据需求而定),格式为
startDate
,格式为
DD/MM/YYYY
。最后一个cte根据生成的数据进行计算,其中一列需要根据
startDate
存储
YYYYMM
日期

问题是它从转换后的日期时间中获取年份和月份,使用convert()它显示:

IDPER
-------
01/01/ --DD/MM/
当startDate未转换时,这两个选项正确显示
YYYYMM

Select *, left(convert(nvarchar(6),new_ini,112),6) as IDPER from table

Select *, convert(nvarchar(6),new_ini,112) as IDPER from table

如何将
YYYYMM
格式转换为
startDate
格式?或者,如果您有一个格式为DD/MM/YYYY的字符串,并且希望使用YYYYMM,那么使用字符串操作,哪一种方法可以更智能地满足此要求

select right(new_ini, 4) + substring(new_ini, 4, 2)

您应该将日期值存储为
date
s或相关类型,而不是字符串。但是,鉴于您已经将其存储为字符串,字符串操作可以执行您需要的操作。

declare
@date=GETDATE()


我的方式会略有不同

SELECT CONVERT(NVARCHAR(6), CONVERT(DATE, new_ini, 103), 112);
在这里,我首先将其转换为date,然后将其格式化为YYYYMMDD,并仅使用6个字符

SELECT CONVERT(NVARCHAR(6), CONVERT(DATE, new_ini, 103), 112);