在SQL中将日期拆分为2列(日期+时间)

oma*_*r K 5 sql sql-server sql-server-2008

我正在尝试将我的表格中的日期键转换为日期时间键.我目前的查询是:

  SELECT 
  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],
  [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;
Run Code Online (Sandbox Code Playgroud)

日期栏显示:2013-06-22 13:36:44.403

我想把它分成两列:日期:2013-06-22

时间(删除微秒):13:36:44

任何人都可以修改我现有的查询以显示所需的输出吗?非常感谢.请注意:我正在使用SQL Server Management Studio 2008.

Adr*_*agg 14

您可能想要研究convert()函数:

  select convert(date, getdate()) as [Date], convert(varchar(8), convert(time, getdate())) as [Time]
Run Code Online (Sandbox Code Playgroud)

  Date       Time
  ---------- --------
  2013-07-16 15:05:43
Run Code Online (Sandbox Code Playgroud)

将这些包装在原始SQL中会让人觉得非常难看:

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;
Run Code Online (Sandbox Code Playgroud)

您可能希望将其中的一部分移动到视图中,以降低复杂性.


小智 11

SELECT CONVERT(DATE,[Date])
SELECT CONVERT(TIME(0),[Date])
Run Code Online (Sandbox Code Playgroud)