SELECT MAX不断将DATETIME转换为VARCHAR

时间:2018-01-24 14:16:00

标签: sql sql-server-2008 datetime max varchar

尝试编写为记录生成MAX日期的内容,然后显示MAX日期小于今天的所有记录,但SQL查询会继续将DATETIME字段转换为VARCHAR,因此我无法使用maxdate < GetDate()

我尝试使用的代码是 'Max Day'=(SELECT MAX (del.original_stop) FROM del, line WHERE del.obj_id=T2.obj_id AND del.type=0 AND line.opt <> 1)

T2.obj_id在我的主FROM子句中的LEFT OUTER JOIN中定义。

有什么想法吗?

*更新w /完整查询

SELECT
T1.doc AS "Document",
T1.owner AS "Own",
T1.last_up AS "Last Updated (EST)",

"Dollars"=ISNULL((SELECT CAST(SUM(fund_amt) AS DECIMAL(16,2)) FROM c_fund T3 WHERE T2.obj_id=T3.obj_id),0),
"Max Day"=(SELECT MAX(del.orig_stop) FROM del, line WHERE del.obj_id=T2.obj_id AND del.del_type=0 AND line.opt <> 1)

FROM
dsk T1 LEFT OUTER JOIN doc_object T2 ON T1.obj_id=T2.obj_id

WHERE
T1.icon_id=4
AND
T1.last_up >= '2018/01/21' AND T1.last_up <= '2018/01/24'

ORDER BY
"Last Updated (EST)" desc

我知道FROM子句中的逗号,很快就会修复它们。

1 个答案:

答案 0 :(得分:0)

使用as分配别名:

select (SELECT MAX(del.original_stop)
        FROM del JOIN
             line 
             ON del.obj_id=T2.obj_id AND del.type=0 AND line.opt <> 1
       ) as max_day,
       . . .

此外,从不FROM子句中使用逗号。 始终使用正确的JOIN语法。

如果original_stop是一个字符串,那么我的第一个建议是修复数据。您应该以原生格式存储日期和时间,而不是字符串。

如果由于某种原因无法修复数据模型,则可以使用convert()。您需要peruse该功能可用的格式。