将MySQL查询转换为SQL Server
任何人都可以帮助将下面的MySQL查询转换为SQL Server “日期格式”和限制:限制是问题所在将MySQL查询转换为SQL Server,mysql,sql-server,Mysql,Sql Server,任何人都可以帮助将下面的MySQL查询转换为SQL Server “日期格式”和限制:限制是问题所在 SELECT DATE_FORMAT(e.eventTime, '%m/%d/%Y %h:%i:%s %p') eventTime, e.displayPath, SUBSTRING_INDEX(source, '/alm:', -1) name, e.eventType, CASE WHEN e.priority = 0 THEN 'Diagnost
SELECT
DATE_FORMAT(e.eventTime, '%m/%d/%Y %h:%i:%s %p') eventTime,
e.displayPath,
SUBSTRING_INDEX(source, '/alm:', -1) name,
e.eventType,
CASE WHEN e.priority = 0 THEN 'Diagnostic' WHEN e.priority = 1 THEN 'Low' WHEN e.priority = 2 THEN 'Medium' WHEN e.priority = 3 THEN 'High' WHEN e.priority = 4 THEN 'Critical' ELSE '' END priority,
COALESCE(COALESCE(COALESCE(d.intvalue, d.floatvalue), d.strvalue), '') eventValue,
COALESCE(ack.strvalue, '') ackUser
FROM
alarm_events e
LEFT JOIN alarm_event_data d ON d.id = e.id AND d.propname = 'eventValue'
LEFT JOIN alarm_event_data ack ON ack.id = e.id AND ack.propname = 'ackUser'
WHERE
eventtime BETWEEN :startDate AND :endDate AND priority BETWEEN :minPriority AND :maxPriority AND
((:active AND e.eventtype = 0) OR (:clear AND e.eventtype = 1) OR (:ack AND e.eventtype = 2))
ORDER BY
e.eventTime DESC
LIMIT :limit
SQL中的变量使用@而不是:所以您需要对此进行调整,并从应用程序中填充变量 您可以用@LIMIT开始查询,而不是LIMIT参数 需要将SUBSTRING_INDEX函数调整为标准SUBSTRING和PATINDEX函数 您需要使用函数()代替DATE_FORMAT() 如注释中所述,在SQL Server中使用其他COALESCE()函数是不必要的 因此,最终的查询看起来像这样(变量由调用程序设置):
您当前的查询是否在MySQL上运行?AFAIK
LIMIT
后面的值不能是语句参数。您尝试了什么?您是否进行过任何互联网搜索或阅读过手册中的任何内容?找到与LIMIT
等效的SQL Server可能比编写此问题更容易。您阅读了SQL Server文档了吗?仅供参考,您不需要像这样嵌套合并。它按照输入的顺序进行处理,并且需要2个以上的输入。
SELECT TOP (@limit)
FORMAT(e.eventTime, 'M/d/yy hh:mm:ss tt') eventTime,
e.displayPath,
SUBSTRING(source, patindex(source,'/alm:'),len(source)) name,
e.eventType,
CASE WHEN e.priority = 0 THEN 'Diagnostic' WHEN e.priority = 1 THEN 'Low' WHEN e.priority = 2 THEN 'Medium' WHEN e.priority = 3 THEN 'High' WHEN e.priority = 4 THEN 'Critical' ELSE '' END priority,
COALESCE(d.intvalue, d.floatvalue, d.strvalue, '') eventValue,
COALESCE(ack.strvalue, '') ackUser
FROM
alarm_events e
LEFT JOIN alarm_event_data d ON d.id = e.id AND d.propname = 'eventValue'
LEFT JOIN alarm_event_data ack ON ack.id = e.id AND ack.propname = 'ackUser'
WHERE
eventtime BETWEEN @startDate AND @endDate AND priority BETWEEN @minPriority AND @maxPriority AND
((@active AND e.eventtype = 0) OR (@clear AND e.eventtype = 1) OR (@ack AND e.eventtype = 2))
ORDER BY
e.eventTime DESC