您好,目前正在从事CODEIGNITER项目,该项目已从MYSQL迁移到SQL SERVER 2014,关于SQL SERVER 2014我只知道基础知识。
大约2个星期以来,我遇到了问题,我一直试图进行搜索以解决问题,但是现在我正花费太多时间试图找到解决方法。
我在MYSQL上有以下查询
SELECT
*,
UNIX_TIMESTAMP(date) as timestamp
FROM (`module_items`)
JOIN `module_items_news2`
ON `item_id` = `id`
WHERE
`module_id` = '$module_id'
AND $this->site = 1
GROUP BY
date_format(date, '%Y%m')
ORDER BY
`date` DESC
上面的代码对于MySQL数据库工作正常。
我正在尝试将其转换为SQL SERVER,但是我在SQL SERVER上没有UNIX_TIMESTAMP函数。创建函数并尝试修改查询后
DECLARE @module_id VARCHAR(1)
SET @module_id = 3
SELECT *,dbo.UNIX_TIMESTAMP(date) as timestamp
FROM module_items JOIN module_items_news2 ON item_id = id WHERE module_id =
@module_id
GROUP BY date_format(date, '%Y%m')
ORDER BY date DESC
现在我要得到
'date_format' is not a recognized built-in function name.
我如何进行操作才能使其正常工作?
亲切的问候。
答案 0 :(得分:1)
在任何一个版本中都不应该使用DATE_FORMAT()
。使用
GROUP BY YEAR(date), MONTH(date)
在两个数据库中。
答案 1 :(得分:0)
我不确定您想做什么,但是我怀疑您想要这样的事情:
SELECT m.*
FROM (SELECT . . . , -- list the columns explicitly
ROW_NUMBER() OVER (PARTITION BY YEAR(date), MONTH(date) ORDER BY date DESC) as seqnum
FROM module_items mi JOIN
module_items_news2 min2
ON min2.item_id = mi.id
WHERE module_id = @module_id
) m
WHERE seqnum = 1
ORDER BY date DESC;
如果您确实需要将日期转换为unix时间戳,则可以使用:
DATEDIFF(second, '1970-01-01', date) as timestamp
这在SQL Server中很少需要(历史上它在Unix系统上不运行)。