如何将Date转换为nvarchar

时间:2011-11-15 11:47:38

标签: sql-server ibatis

enter image description here 有一个搜索屏幕,我想通过搜索特定数据来显示结果。我的过滤器是“显示'日期7/5/05'之后的所有日期”。

由于这是一个JSF表单,所以 7/5/05 会被存储为Date.And再次将其转换为Long '1120501800000'

现在查询变得像这样

SELECT * FROM   ABC  WHERE  due_date BETWEEN '1120501800000' AND '1952498291808'  ORDER  BY trstart_date DESC 

但问题是due_date列是“nvarchar(50)”,值存储为“7/5/05”。

有人可以告诉我如何将“1120501800000”转换为“7/5/05”。即使我不知道 fastTime 是什么,如图所示?

提前致谢。

我正在使用Jsf,Spring,IBatis,sql server

1 个答案:

答案 0 :(得分:1)

这些数字似乎代表unix时间戳,精确到毫秒级。

SELECT DATEADD( SECOND
              , CONVERT(BIGINT, '1120501800000') / 1000
              , '1970/01/01')

这将于18:30转换为2005/07/04(yyyy/mm/dd)。

在您的示例中,您获得的是2005/07/05,这可能是由于当地时间的UTC时区偏移造成的。假设你提前6个小时;转换为:

SELECT DATEADD( HOUR
              , 6
              , DATEADD( SECOND
                       , CONVERT(BIGINT, '1120501800000') / 1000
                       , '1970/01/01')
              )

正如您所料,这将转换为2005/07/05。

要获得假装的mm/dd/yy格式:

SELECT CONVERT(VARCHAR(2), DATEPART(MONTH, date)) + '/'
     + CONVERT(VARCHAR(2), DATEPART(DAY, date))   + '/'
     + RIGHT(CONVERT(VARCHAR(4), DATEPART(YEAR, date)), 2)
  FROM ( SELECT DATEADD(HOUR, 6, DATEADD(SECOND, CONVERT(BIGINT, '1120501800000') / 1000, '1970/01/01'))
       ) AS T (date)