Splitting Date into 2 Columns (Date + Time) in SQL

后端 未结 4 1055
醉酒成梦
醉酒成梦 2020-12-11 06:12

I\'m trying to convert the Date key in my table which is numeric into date time key. My current query is:

  SELECT 
  DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT         


        
相关标签:
4条回答
  • 2020-12-11 06:30

    You could use STUFF function:

    DECLARE @MyTable TABLE([Date] VARCHAR(20));
    INSERT  @MyTable ([Date])
    VALUES  ('20130622133644403');
    
    SELECT  y.*,
            CONVERT(DATE,y.Date_AsDateTime) AS OnlyDate,
            CONVERT(TIME(0),y.Date_AsDateTime) AS OnlyTime
    FROM(
        SELECT  x.[Date] AS Date_AsVarChar, CONVERT(DATETIME, STUFF(STUFF(STUFF(STUFF(x.[Date],9,0,' '),12,0,':'),15,0,':'),18,0,'.')) AS Date_AsDateTime
        FROM    @MyTable x
    ) y;
    

    Results:

    Date_AsVarChar       Date_AsDateTime         OnlyDate   OnlyTime
    -------------------- ----------------------- ---------- --------
    20130622133644403    2013-06-22 13:36:44.403 2013-06-22 13:36:44
    

    Solution:

    SELECT 
        CONVERT(DATE,y.Date_AsDateTime) AS OnlyDate,
        CONVERT(TIME(0),y.Date_AsDateTime) AS OnlyTime
    FROM(
        SELECT [Object], MsgId, Parms,
            CONVERT(DATETIME, STUFF(STUFF(STUFF(STUFF(x.[Date],9,0,' '),12,0,':'),15,0,':'),18,0,'.')) AS Date_AsDateTime
        FROM JnlDataSection
    ) A
    WHERE   MsgID = '325' 
    -- SUBSTRING(Parms,1,6) = 'V40449' is not SARG-able
    AND     Parms LIKE 'V40449%' 
    ORDER BY DATE DESC;
    
    0 讨论(0)
  • 2020-12-11 06:30

    Use the following scenario for getting the date,time,day,month,year,hours,minutes,seconds,AM/PM:

    select 
       UpdatedOn , CONVERT(varchar,UpdatedOn,100) DateTime, CONVERT(varchar,UpdatedOn,10) Date , 
       CONVERT(varchar,UpdatedOn,108) Time , substring(CONVERT(varchar,UpdatedOn,106),1,2) Day, 
       substring(CONVERT(varchar,UpdatedOn,106),4,3) CMonth,    
       substring(CONVERT(varchar,UpdatedOn,105),4,2) 
       NMonth, substring(CONVERT(varchar,UpdatedOn,106),8,4) Year,      
       left(right(CONVERT(varchar,UpdatedOn,100),7),2) Hours_12, 
       substring(CONVERT(varchar,UpdatedOn,108),1,2) Hours_24, 
       substring(CONVERT(varchar,UpdatedOn,108),4,2) Minutes, 
       substring(CONVERT(varchar,UpdatedOn,108),7,2) Second, right(CONVERT(varchar,UpdatedOn,100),2)    
       AM_PM 
    from 
       dbo.DeviceAssignSim where AssignSimId=55;
    
    0 讨论(0)
  • 2020-12-11 06:40
    SELECT CONVERT(DATE,[Date])
    SELECT CONVERT(TIME(0),[Date])
    
    0 讨论(0)
  • 2020-12-11 06:52

    You may want to investigate the convert() function:

      select convert(date, getdate()) as [Date], convert(varchar(8), convert(time, getdate())) as [Time]
    

    gives

      Date       Time
      ---------- --------
      2013-07-16 15:05:43
    

    Wrapping these around your original SQL gives the admittedly very ugly:

    SELECT convert(date, 
          DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
            SUBSTRING([Date],10,2)+':'+
            SUBSTRING([Date],12,2)+':'+
            SUBSTRING([Date],14,2)+'.'+
            SUBSTRING([Date],15,3)))) [Date],
      convert(varchar(8), convert(time, 
          DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
            SUBSTRING([Date],10,2)+':'+
            SUBSTRING([Date],12,2)+':'+
            SUBSTRING([Date],14,2)+'.'+
            SUBSTRING([Date],15,3))))) [Time],
    
      [Object] AS [Dataset],
      SUBSTRING(Parms,1,6) AS [Media]
      FROM (Select CONVERT(VARCHAR(18),[Date]) [Date], 
      [Object],
      MsgId,
      Parms
      FROM JnlDataSection) A
      Where MsgID = '325' AND
      SUBSTRING(Parms,1,6) = 'V40449' 
      Order By Date DESC;
    

    You may want to move part of this into a view, just to reduce complexity.

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