简体   繁体   English

SQL Server 2005从字符串中提取日期

[英]SQL Server 2005 extract a date from a string

I have a view I am creating and I want to group by an extracted date from a column that has a date and time. 我有一个正在创建的视图,我想按从具有日期和时间的列中提取的日期进行分组。 This is where I am.... 这就是我的位置。

SELECT     
    ClockCode AS MOnum, SUM(Actual_Hrs) AS Runtothours, TStamp
FROM
    dbo.Raw_Booking
WHERE     
   (Actual_Hrs > 0) AND (ClockCode LIKE 'MO%') 
   AND (TStamp > CONVERT(DATETIME, '2013-01-01 00:00:00', 102))
GROUP BY 
   ClockCode, TStamp

so while I have it grouped by the TStamp column there is a record for each one based on the time... I am looking to get a total amount of run time for each order by date. 因此,虽然我将其按TStamp列分组,但每个记录都有基于时间的记录...我希望按日期获取每个订单的运行时间总量。

The TStamp column is formatted as: TStamp列的格式为:

2013-01-02 08:18:47.000

If you can change your schema, store it as a date to begin with. 如果可以更改架构,请将其存储为开始日期。 Otherwise, change your group by clause to something similar to... 否则,将您的group by子句更改为类似于...

GROUP BY CAST(TStamp AS DATE)

EDIT: Forgot you were in SQL 2005. You can still do something like the following, but keep in mind this should be considered an ugly, short-term, workaround. 编辑:忘记了您在SQL 2005中。您仍然可以执行以下操作,但是请记住,这应该被视为一种丑陋的短期解决方法。 All the comments in this thread about redesigning are completely valid and should be pursued... 此主题中有关重新设计的所有评论都是完全有效的,应遵循...

GROUP BY SUBSTRING(TStamp, 0, 11)
SELECT ClockCode AS MOnum
     , SUM(Actual_Hrs) AS Runtothours
     , TStampDate
FROM dbo.Raw_Booking
     CROSS APPLY (
         SELECT CONVERT(datetime, TStamp, 102) AS TStampDateTime
     ) AS CA1
     CROSS APPLY (
         SELECT DATEADD(day, DATEDIFF(day, 0, TStampDateTime), 0) AS TStampDate
     ) AS CA2
WHERE Actual_Hrs > 0 
      AND ClockCode LIKE 'MO%'
      AND TStampDateTime > CONVERT(DATETIME, '2013-01-01 00:00:00', 102))
GROUP BY ClockCode
        ,TStampDate

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM