2013-10-22 127 views
0

我转换一些字符串值datetime如下:日期时间转换在SQL Server 2005中

'20131018' 
'20130917' 

使用

CONVERT(DATETIME, @date, 101) 

我得到了以下

'2013-10-18 00:00:00.000' 
'2013-09-17 00:00:00.000' 

我怎么删除值的时间部分?

+0

在SQL Server 2008 ** **,你会得到'DATE'数据类型只是那 - 仅限日期。 2005年只有'DATETIME',这些值总是包含时间部分。 –

+0

时间组件是否会破坏任何东西,或只是在视觉上烦人? – StingyJack

+0

CONVERT(日期,@date,101)会做你想做的事 –

回答

0

SUBSTRING(表达,启动,长度),其中表达将是您的时间戳串,并开始将是1和长度将是“YYYY-MM-DD”,即长度10对于 多个参考请http://technet.microsoft.com/en-us/library/ms187748.aspx

检查“marc_s”所说的内容。只需使用DATE而不是DATETIME.This将是更好的选择。

+0

真的,'DATE'在这里是更好的选择 - 但是这个数据类型是** NOT YET **在SQL Server * * 2005 **,即OP正在使用.... –

+0

@ marc_s - 然后我们可以使用子串,我认为我建议。 – virus

0

有我做的一些代码。如果你能弄清楚如何让这个更快或更好,让我知道! ;)

case --Format date into YYYYMMDD with placeholder 0's 
    when (CAST(DATEPART(DD,DATEADD(day, 7, <DATE>)) as int) < 10) AND (CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as int) < 10) 
    then CAST(DATEPART(YYYY,DATEADD(day, 7, <DATE>)) as CHAR(4)) 
     +'0'+ LTRIM(RTRIM(CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as CHAR(2)))) 
     +'0'+LTRIM(RTRIM(CAST(DATEPART(DD,DATEADD(day, 7, <DATE>)) as CHAR(2)))) 
    when (CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as int) < 10) 
    then CAST(DATEPART(YYYY,DATEADD(day, 7, <DATE>)) as CHAR(4)) 
     +'0'+LTRIM(RTRIM(CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as CHAR(2)))) 
     +CAST(DATEPART(DD,DATEADD(day, 7, <DATE>)) as CHAR(2)) 
    when (CAST(DATEPART(DD, DATEADD(day, 7, <DATE>)) as int) < 10) 
     then CAST(DATEPART(YYYY,DATEADD(day, 7, <DATE>)) as CHAR(4)) 
      + CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as CHAR(2)) 
      +'0'+LTRIM(RTRIM(CAST(DATEPART(DD,DATEADD(day, 7, <DATE>)) as CHAR(2)))) 
    else CAST(DATEPART(YYYY,DATEADD(day, 7, <DATE>)) as CHAR(4)) 
     +CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as CHAR(2)) 
     +CAST(DATEPART(DD,DATEADD(day, 7, <DATE>)) as CHAR(2)) 
end 

下面是它的工作原理。把它放在SELECT之后。做一个查找和替换,并把你的日期在那里。它会检查月份和日期的数字位数,然后在适当的时候在字符串中插入0或2。我保存了这段代码,以便在遇到此问题时很容易使用。希望能帮助到你!

- 编辑 - 它发生在我,这可能是你想要做什么反...