【问题标题】:field < currentdate - 7 format datefield < currentdate - 7 格式日期
【发布时间】:2019-07-11 15:31:25
【问题描述】:

我的日期时间字段的日期格式为 M/dd/yyyy。 SQL Server 日期的日期格式为 yyyy-mm-dd。 我需要获取当前日期 -7 天并格式化输出

示例。

SELECT * FROM [Table]
WHERE Time Generated >= current date - 7 days 

当前日期的输出 - 7 应该是 M/dd/yyyy

SELECT FORMAT(Getdate(), 'MM dd, yyyy')

DECLARE @date varchar(30) = FORMAT(getdate(), 'M/dd/yyyy');  
SELECT Computer, AppFileDisplayName FROM DHAppReliability
WHERE HasCrashesDaily = 'TRUE'
AND TimeGenerated <= DATEADD(DAY, -7, @date)
ORDER BY Computer

消息 241,第 16 级,状态 1,第 2 行 从字符串转换日期和/或时间时转换失败。

【问题讨论】:

  • 日期没有格式,它们是二进制值。格式仅适用于将字符串解析为日期,或将日期格式化为字符串以供显示。 SSMS 将始终使用 ISO8601 格式,因为它是唯一明确的格式。这并不意味着日期有某种特定的格式
  • “生成”字段是什么数据类型?当您说您的日期格式为 M/dd/yyyy 时,您的意思是它以该格式保存在字符串中,还是 SSMS 显示为这样?

标签: sql sql-server


【解决方案1】:

修复您的数据!不要将日期存储为字符串。

无论如何,您都需要使用内置的日期/时间功能进行比较。那将是:

SELECT Computer, AppFileDisplayName FROM DHAppReliability
WHERE HasCrashesDaily = 'TRUE' AND
      CONVERT(date, TimeGenerated, 101) <= DATEADD(DAY, -7, @date)
ORDER BY Computer

我不能 100% 确定 101 格式是否正确,因为您没有提供示例数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多