Sql-server – Extract time portion of Datetime2(7) in hhmmssfff format

datetimesql serversql-server-2008-r2t-sql

I need to extract the time portion of a datetime2(7) column in hhmmssfff format and I am doing it like this:

DECLARE @mdate AS DATETIME2(7) 

SET @mdate = '2012-03-15 10:13:27.5437431'

SELECT LEFT(REPLACE(REPLACE(CONVERT(VARCHAR ,@mdate ,114),':',''),'.',''),9)

Is there a better approach than doing this ugly replaces/convert/left?

I need this to join to a DimTime dimension whose key is in hhmmssfff format.

Best Answer

  1. Please don't use varchar without length.
  2. Please use semi-colons as statement terminators.

  3. I don't think there is a more covert way to do this. Here is how I would do it (14 characters shorter, ignoring the semi-colon):

    DECLARE @mdate AS DATETIME2(7);
    
    SET @mdate = '2012-03-15 10:13:27.5437431';
    
    SELECT REPLACE(REPLACE(CONVERT(TIME(3),@mdate),'.',''),':','');