Search code examples
sqlsql-server-2000

Create datetime column in SQL query


I'm writing a report that will show response times. Requests can come in at any time, but any request done after 5:30 PM and before 7:30 AM should default to 7:30 AM as the requesttime

SELECT 
   Meeting_Invites.Invite_ID, ResponseDateTime, 
   REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') AS Time,
   CASE 
      WHEN REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') > 1730 OR 
           REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') < 0730 
      THEN 1 
      ELSE 0 
   END AS NextDay, 
   CASE 
      WHEN REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') > 1730 
        THEN 'Next Day' 
      WHEN REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') < 0730 
        THEN 'Same Day' 
      ELSE '' 
   END AS DateType
FROM 
   Meeting_Invites 
WHERE 
   ResponseDateTime BETWEEN {ts '2012-11-01 00:00:00'} AND {ts '2012-12-15 23:59:59'}
ORDER BY 
   Time

Which produces the results below. Is there a way to create a date that would match my CreatedDate column?

ID      Date                            Time    DateType CreatedDate
--------------------------------------------------------------------------------
84613   2012-12-06 07:29:02.823 0729    1   Same Day 2012-12-06 07:30:00
84079   2012-11-11 07:47:39.947 0747    0            (Use Date column)
84048   2012-11-05 08:13:50.423 0813    0            (Use Date column)
84372   2012-11-19 08:14:23.820 0814    0            (Use Date column)
84163   2012-11-13 20:43:19.760 2043    1   Next Day 2012-11-14 07:30:00
83527   2012-11-09 21:19:52.917 2119    1   Next Day 2012-11-10 07:30:00
84374   2012-11-26 21:35:21.887 2135    1   Next Day 2012-11-17 07:30:00
82518   2012-11-08 21:59:11.413 2159    1   Next Day 2012-11-09 07:30:00

I'm using ColdFusion to create the report, so I could built in the logic when I run the report, but would prefer not to.


Solution

  • SELECT Meeting_Invites.Invite_ID, ResponseDateTime, REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') AS Time
    , CASE WHEN REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') > 1730 OR REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') < 0730 THEN 1 ELSE 0 END AS NextDay
    , CASE WHEN REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') > 1730 THEN 'Next Day' WHEN REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') < 0730 THEN 'Same Day' ELSE '' END AS DateType
    , CASE WHEN REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') > 1730 THEN
                DATEADD(dd, 1, CONVERT(DATETIME(CONVERT(VARCHAR(10), ResponseDateTime, 121) + ' 07:30:00', 121)))
           WHEN REPLACE(CONVERT(varchar(5), ResponseDateTime, 108), ':', '') < 0730 THEN 
                CONVERT(DATETIME(CONVERT(VARCHAR(10), ResponseDateTime, 121) + ' 07:30:00', 121))
           ELSE ResponseDateTime END AS CreatedDate
    FROM Meeting_Invites 
    WHERE ResponseDateTime BETWEEN {ts '2012-11-01 00:00:00'} AND {ts '2012-12-15     23:59:59'}
    ORDER BY Time