【问题标题】:MySQL Query to MS SQLMySQL 查询到 MS SQL
【发布时间】:2014-03-09 09:26:24
【问题描述】:

我有以下 MySQL 查询:

SELECT date, time, custom_id, Number
FROM traffic t
WHERE CONCAT(date, " ", time) BETWEEN "01/06/2014 00:00" AND "01/10/2014 23:00"
AND Number = 
(SELECT MAX(CAST(Number as SIGNED)) FROM traffic WHERE t.date = date and t.custom_id = custom_id)
ORDER BY date, CAST(Number as SIGNED) DESC, custom_id

这是 MySQL 中的 SQLFiddle(工作):http://sqlfiddle.com/#!2/6e1248/3

如何将其转换/翻译为 MS SQL? SQLFiddle(不工作):http://sqlfiddle.com/#!6/6e124/1

提前致谢

【问题讨论】:

  • 为什么日期和时间是分开的列?除非日期是正确的 DATE 格式,否则这在 MySQL 中也不起作用!
  • 由于日期时间格式,查询可能在 MySQL 中不起作用。 between 跨越月份时将不起作用。

标签: mysql sql translate


【解决方案1】:

主要问题是 SQL 服务器不喜欢 " 包含字符串,这些将被视为删除这些(以及 CASTs)的列名:

SELECT date, time, custom_id, Number
FROM traffic t
WHERE CONCAT(date, ' ', time) BETWEEN '01/06/2014 00:00' AND '01/10/2014 23:00'
AND Number = 
(SELECT MAX(Number) FROM traffic WHERE t.date = date and t.custom_id = custom_id)
ORDER BY date, Number DESC, custom_id

编辑:哎呀,刚刚注意到需要演员表。以@bdn02 的回答为例。

【讨论】:

  • 这就是为什么我没有得到我期望的结果。谢谢!
【解决方案2】:
SELECT date, time, custom_id, Number
FROM traffic t
WHERE CONCAT(date, ' ', time) BETWEEN '01/06/2014 00:00' AND '01/10/2014 23:00'
AND Number = 
(SELECT MAX(CAST(Number as smallint)) FROM traffic WHERE t.date = date and t.custom_id = custom_id)
ORDER BY date, CAST(Number as smallint) DESC, custom_id

【讨论】:

  • 完美运行。完全相同的结果,谢谢!
  • 感谢您,SQLFiddle 的链接更加简单!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多