日期转换问题

时间:2014-07-18 14:59:47

标签: sql sql-server

工作代码

if getdate()>convert(DATE,'09/29/2006')
select 1
else 
select 2

不工作代码

DECLARE @1 varchar='09',
    @2 varchar='29',
    @3 varchar='2006'
if getdate()>convert(DATE,@1+'/'+@2+'/'+@3)
select 1
else 
select 2

遇到问题

  

从字符串转换日期和/或时间时转换失败。

请告诉我这些变化?

2 个答案:

答案 0 :(得分:4)

使用varchar()时始终使用长度。您的值被截断为一个字符:

DECLARE @1 varchar(255)= '09',
    @2 varchar(255) = '29',
    @3 varchar(255) = '2006'

因此,您的日期转换为'0/2/2'

答案 1 :(得分:1)

尝试声明varchar(n)的大小,因为在没有声明任何内容的情况下,您将获得varchar(1)。看看this article

DECLARE @1 VARCHAR(2)='09',
    @2 VARCHAR(2)='29',
    @3 VARCHAR(4)='2006'


if getdate()>convert(DATE,@1+'/'+@2+'/'+@3)
select 1
else 
select 2

如果您使用的是2012+,则可以使用CONCAT()来组合字符串。

CONCAT(@1,'/',@2,'/',@3)