在 SQL 服务器存储过程结果中将日期转换为字符串

Converting a date to string in SQL Server stored procedure results

背景

我是 SQL 的初学者。我编写了一个 SQL 服务器存储过程,它从上个月的 table 中提取某些数据并显示结果。然后将结果保存并以 .csv 格式通过电子邮件发送到(这不是存储过程的一部分)。

Objective

根据 存储过程 SQL 中 sequel 的最后一行,我试图确保转换结果中的某些列值到字符串,但不改变存储过程正在查询的 table。我尝试转换为字符串的列中的当前值为 2020-12-01 09:20:00.000

问题

当我 运行 存储过程时,我得到一个无效的列名错误,并且作为列 trade_date 有效的,我确定这只是我糟糕的尝试。

这是我的存储过程:

SELECT *
FROM tom..blot_v
WHERE trade_date BETWEEN DATEADD(DAY, 1, EOMONTH(GETDATE(), -2)) 
                     AND EOMONTH(GETDATE(), -1)
  AND type NOT IN ('cancel', 'ORDER-FILLED', 'ORDER-UNFILLED') 
  AND trade_type = 'QR'
ORDER BY trade_date

SELECT CONVERT(varchar, trade_date, 20)

帮助

有谁能告诉我我的代码哪里出了问题,特别是

SELECT CONVERT(varchar, trade_date, 20)

这是我尝试转换 trade_date 值的输出,然后再尝试其他值。

不管你是否应该,根据你提供的代码,你得到列错误的原因是即使你可能认为因为你 运行 它上面的查询,该字段可用,不可用。

如果您想将字段转换为文本,您应该在查询 运行 并且可以访问数据时执行此操作。 所以这意味着:

SELECT CONVERT(varchar, trade_date, 20) as tradedate, * 
FROM tom..blot_v
WHERE trade_date BETWEEN DATEADD(DAY, 1, EOMONTH(GETDATE(), -2)) 
                     AND EOMONTH(GETDATE(), -1)
  AND type NOT IN ('cancel', 'ORDER-FILLED', 'ORDER-UNFILLED') 
  AND trade_type = 'QR'
ORDER BY trade_date