Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用标准强制转换而不是转换_Sql Server_Sql Server 2012_Standards - Fatal编程技术网

Sql server 使用标准强制转换而不是转换

Sql server 使用标准强制转换而不是转换,sql-server,sql-server-2012,standards,Sql Server,Sql Server 2012,Standards,在检索6个月前的本月第一个月时,这些操作将起作用: DECLARE @Now DATETIME = SYSDATETIME(); --1 SELECT CONVERT(INT,CONVERT(CHAR(8),DATEADD(mm,DATEDIFF(mm,0,@Now)-5,0),112)); --2 SELECT CONVERT(INT,CONVERT(CHAR(6),DATEADD(mm,-5,@Now),112) + '01'); 如何使用标准函数CAST获得相同的结果 select

在检索6个月前的本月第一个月时,这些操作将起作用:

DECLARE @Now DATETIME = SYSDATETIME();

--1
SELECT CONVERT(INT,CONVERT(CHAR(8),DATEADD(mm,DATEDIFF(mm,0,@Now)-5,0),112));

--2
SELECT CONVERT(INT,CONVERT(CHAR(6),DATEADD(mm,-5,@Now),112) + '01');
如何使用标准函数
CAST
获得相同的结果

select cast(year(dateadd(month, -5,@now)) as char(4)) 
+ right(100 + month(dateadd(month, -5,@now)), 2) + '01'
备选方案:

select cast(year(a.n) as char(4)) + right(100 + month(a.n), 2) + '01'
from (select dateadd(m,-5,@now) n) a
备选方案:

select cast(year(a.n) as char(4)) + right(100 + month(a.n), 2) + '01'
from (select dateadd(m,-5,@now) n) a

您可以这样做,但它不使用
cast()


您可以这样做,但它不使用
cast()


有效的方法是

select dateadd(month,datediff(month,0,@now)-5,0)

有效的方法是

select dateadd(month,datediff(month,0,@now)-5,0)

在这里扩展Madhivanan的答案是如何使用CAST而不是CONVERT:)


在这里扩展Madhivanan的答案是如何使用CAST而不是CONVERT:)


…但我试图将结果转换为一个INT,它是一个格式类似于YYYYMMDD的日期?这是演示文稿的问题。为什么要使用CAST?…这不是演示问题,而是另一种类型。原因如OP中所述-我不想使用MS的transact-sql函数
CONVERT
,而是使用标准的sql函数
CAST
…但我试图将结果转换为一个INT,即格式类似于YYYYMMDD?的日期,这是演示问题。为什么要使用CAST?…这不是演示问题,而是另一种类型。原因如OP中所述-我不想使用MS的transact-sql函数
CONVERT
,而是使用标准sql函数
CAST
CONVERT
在这种情况下非常有用!)有趣的解决方案-谢谢。我记不起他的确切推理,但我最近参加了伊兹克B-G的一个课程,他有一个明确的理由不使用
0
,而是使用
19000101
CONVERT
在这种情况下非常有用!)有趣的解决方案-谢谢。我记不起他的确切推理,但我最近参加了伊兹克B-G的一个课程,他有一个明确的理由不使用
0
,而是使用
19000101