How do I strip the date off of a datetime string in SQL SSIS?

前端 未结 5 635
情话喂你
情话喂你 2020-12-20 23:49

I\'m working on a data warehouse project and would like to know how to (preferably in a Derived Column component in a Data flow) strip the date piece off of a SQL datetime r

相关标签:
5条回答
  • 2020-12-21 00:08

    Ran into this with writing a report for a scheduling app, needed the time that was stored as part of a datetime data type. I formated the datetime as 0 which gives you this mon dd yyyy hh:miAM (or PM), and just did a substring of that which returned the time only in an AM/PM format.

    Example below.

    DECLARE @S DATETIME = GETDATE()
    
    SELECT SUBSTRING(CONVERT(NVARCHAR(30), @S , 0) , 13 , 10) AS ApptTime
        , CONVERT(NVARCHAR(30), @S , 0) AS ApptDate
    
    0 讨论(0)
  • 2020-12-21 00:14

    I would just do a cast to DT_DBTIME type (using Derived Column transform, or Convert type transform). DT_DBTIME contains just (hours, minutes, seconds) part of the date/time, so you'll get rid of the date part.

    0 讨论(0)
  • 2020-12-21 00:16

    If you need to do this in a variable expression Michael's solution won't work, but you can use the following expression:

    (DT_DATE)(DT_DBDATE)GETDATE()
    

    (DT_DBDATE) converts the current date and time to a date only. But the new datatype is not compatiple with SSIS's datetime. Therefore you'll have to use (DT_DATE) for converting to a compatible type.

    Courtesy of this solution belongs to Russel Loski who has posted it in his blog: http://www.bidn.com/blogs/RussLoski/ssas/1458/converting-datetime-to-date-in-ssis

    0 讨论(0)
  • 2020-12-21 00:17

    I personally use a series of functions for this. E.g.:

    ALTER FUNCTION [dbo].[TIMEVALUE]
    (
     @Datetime datetime
    )
    RETURNS datetime
    AS
    BEGIN
        RETURN (@Datetime - CAST(ROUND(CAST(@Datetime AS float), 0, 1) AS datetime))
    END
    

    I'd love to claim all the credit but it should really go to this guy.

    0 讨论(0)
  • 2020-12-21 00:24

    Actually if you reverse the first 2 expressions like this: (DT_DBDATE)(DT_DATE)GETDATE() instead of (DT_DATE)(DT_DBDATE)GETDATE(), then you will TRUNCATE the time off the date field.

    If the DT_DATE expression is before the DT_DBDATE expression, you will still have the time portion in your output, but it will be reset to all zeroes.

    0 讨论(0)
提交回复
热议问题