【问题标题】:Converting numeric date column into date and time in SQL在 SQL 中将数字日期列转换为日期和时间
【发布时间】:2013-06-28 16:36:15
【问题描述】:

我目前正在使用 SQL Server Management Studio 2008,并且该数据库是很久以前创建的。创建它的人将 Date 设置为数值,并将 GMT Time 设置为比实际时间早 4 小时,从而在查询中的某处强制使用 -4 Hour 函数。我感兴趣的是仅在 4 小时转换后的当天前 4 天的数据,并具有正确的日期和时间格式。

列: 日期(数字(17,9),不为空) 参数(nvarchar(2000),空) ...等等。

   Right now my query is:
   -----
   SELECT ItemId, DATE,
   SUBSTRING(Parms,1,6) +' Was removed from:' AS RemovalPath,
   [OBJECT] AS [MOVE LIST]
   FROM JnlList
   where UserCode = 'Automation' AND ListType = 'M'
   Order by Date DESC, RemovalPath DESC;
   -----
   1 sample row output for my query out of 385 rows is:
   -----
   ItemId: 9393
   Date: 20130627.180846113
   RemovalPath: V77963 Was Removed From:
   MOVE LIST: M-002411
   -----
   REQUIRED OUTPUT:
   ItemId: 9393
   Date: 2013-06-27
   Time: 2:08:46
   RemovalPath: V77963 Was Removed From:
   MOVE LIST: M-002411
   -----

任何人都可以对我的查询进行更改以获得所需的输出吗?将不胜感激。

【问题讨论】:

  • 这个问题和这个问题有什么不同吗:stackoverflow.com/questions/17368654/…?
  • @Lamak 是的,我已经修复了列问题,所以我想删除前一个问题并发布一个仅与日期有关的新问题。

标签: sql sql-server date time alter


【解决方案1】:

试试这个:

;WITH CTE AS
(
    SELECT  CONVERT(DATETIME,LEFT([Date],8)+' '+
                             SUBSTRING([Date],10,2)+':'+
                             SUBSTRING([Date],12,2)+':'+
                             SUBSTRING([Date],14,2)+'.'+
                             RIGHT([Date],3)) [Date],
            ItemId,
            Parms,
            [OBJECT]
    FROM (  SELECT  ItemId,
                    CONVERT(VARCHAR(18),[Date]) [Date],
                    Parms,
                    [OBJECT]
            FROM YourTable
            WEHRE UserCode = 'Automation' AND ListType = 'M') A
)
SELECT  ItemId,
        CONVERT(DATE,[Date]) [Date],
        CONVERT(TIME(0),[Date]) [Time],
        SUBSTRING(Parms,1,6) +' Was removed from:' RemovalPath,
        [OBJECT] [MOVE LIST]
FROM CTE
WHERE [Date] >= CONVERT(DATE,DATEADD(DAY,-4,GETDATE()))

【讨论】:

  • Msg 102,级别 15,状态 1,第 12 行 'A' 附近的语法不正确。
  • Msg 102, Level 15, State 1, Line 12 ')' 附近的语法不正确。
  • @omarK 是的,刚刚更新。但是,真的,这很容易发现,您应该尝试稍微修改一下代码
  • @omarK 好的,完成。 (顺便说一下,那些不是 microsoft 秒)
  • @omarK 请查看DATEADD。答案解决了问题的症结;你确定可以自己调整 4 小时吗?
【解决方案2】:

这样的事情应该可以工作:

SELECT ItemId,
DATEADD(HH, -4, CONVERT(DATETIME, substring(DATE, 1, 4) + '-' + substring(DATE, 5, 2) + '-' + substring(DATE, 7, 2) + ' ' + substring(DATE, 10, 2) + ':' + substring(DATE, 12, 2) + ':' + substring(DATE, 14, 2) + '.' + substring(DATE, 16, 3))),
SUBSTRING(Parms,1,6) +' Was removed from:' AS RemovalPath,
[OBJECT] AS [MOVE LIST]
FROM JnlList
where UserCode = 'Automation' AND ListType = 'M'
AND DATEADD(HH, -4, CONVERT(DATETIME, substring(DATE, 1, 4) + '-' + substring(DATE, 5, 2) + '-' + substring(DATE, 7, 2) + ' ' + substring(DATE, 10, 2) + ':' + substring(DATE, 12, 2) + ':' + substring(DATE, 14, 2) + '.' + substring(DATE, 16, 3))) > GETDATE() - 4
Order by Date DESC, RemovalPath DESC;

【讨论】:

  • sergio 它给了我这个错误:Msg 102, Level 15, State 1, Line 2 ',' 附近的语法不正确。
  • 您是否可以删除代码中时间部分的 7 微秒数字?
猜你喜欢
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2019-08-31
  • 1970-01-01
相关资源
最近更新 更多