【问题标题】:SELECT MAX keeps converting DATETIME to VARCHARSELECT MAX 不断将 DATETIME 转换为 VARCHAR
【发布时间】:2018-07-03 14:57:07
【问题描述】:

尝试编写一些生成记录的 MAX 日期的内容,然后显示所有 MAX 日期小于今天的记录,但 SQL 查询不断将 DATETIME 字段转换为 VARCHAR,因此我无法使用 @987654322 @

我尝试使用的代码是 '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 中定义。

有什么想法吗?

*使用完整查询更新

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 子句中的逗号,很快就会解决这些问题。

【问题讨论】:

  • 当您添加 SQL 标签时,会弹出一个大框,建议您也为正在使用的特定 DBMS 添加标签,因为它们之间的功能和语法各不相同。你为什么忽略这个建议?现在我们必须了解您使用的是什么 DBMS?它们之间的功能和支持各不相同,并且知道您正在使用哪一个是相关的。请为 DBMS 添加一个标签,这样我们就不会浪费您的时间或我们的回答,只是为了发现它不适用于您的特定数据库。 废话,直到您得到答案这样做。

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


【解决方案1】:

使用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 该函数可用的格式。

【讨论】:

  • 我刚刚用完整的查询更新了 OP。我尝试了您的建议,但在将 DATETIME 字段从数据库转换为结果中的 VARCHAR 时仍然存在问题。
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 2011-06-03
  • 1970-01-01
  • 2010-09-09
  • 2017-11-29
  • 2021-03-26
  • 2021-06-17
  • 1970-01-01
相关资源
最近更新 更多