有一个搜索屏幕,我想通过搜索特定数据来显示结果。我的过滤器是“显示'日期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
答案 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)