0

我将一些字符串值转换datetime为如下:

'20131018'
'20130917'

通过使用

CONVERT(DATETIME, @date, 101)

我得到了以下

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

我将如何删除值的时间部分?

4

2 回答 2

0

SUBSTRING(表达式,开始,长度),其中表达式将是您的时间戳字符串,开始将是 1,长度将是“yyyy-mm-dd”的长度,即 10。有关更多参考,请查看http://technet.microsoft.com /en-us/library/ms187748.aspx

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

于 2013-10-22T21:12:20.327 回答
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 插入到字符串中。我保存了这段代码,以便在遇到此问题时易于使用。希望能帮助到你!

--EDIT-- 在我看来,这可能与您想要做的相反...

于 2013-10-22T21:45:50.310 回答