Sql server 使用标准强制转换而不是转换
在检索6个月前的本月第一个月时,这些操作将起作用: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
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
。