【问题标题】:Change date format dd/mm/yyyy to yyyy-mm-dd将日期格式 dd/mm/yyyy 更改为 yyyy-mm-dd
【发布时间】:2018-11-26 14:42:26
【问题描述】:

我在 SQL Server 2008 中工作,在合并时出现类似

的错误

从字符串转换日期时间时转换失败

select *
from table_name
where cast(f_datetime as date) <=
cast(cast(datepart(year,cast(convert(varchar(250),@Year,103) as date)  )as varchar(250))+ '-'+ cast(datepart(MM,cast(convert(varchar(10),@month,103) as varchar(50))+'-01' as date)

【问题讨论】:

  • 你想在这里做什么?为什么f_datetime 不存储为日期?
  • 请提供f_datetime的示例值。
  • 删除破折号并使用类似 20181231 的格式。2018-02-01 可以解释为 1 月 2 日或 2 月 1 日,具体取决于当前的语言环境和设置,而没有破折号的始终是 YYYYMMDD。这个选角也很糟糕。我什至无法弄清楚你到底想要达到什么目的。
  • f_datetime@Year@Month的数据类型是什么?

标签: sql tsql sql-server-2008


【解决方案1】:

我无法与f_datetime 上的cast() 通话。但对于其余的,你可以这样做:

where cast(f_datetime as date) <= convert(date, convert(varchar(250), @year * 10000 + @month * 100 + 1))

这简化了计算,并防止像 @year 这样的东西由于 convert() 函数而被视为 date

【讨论】:

    【解决方案2】:

    我假设您的 f_datetime 字段格式是“dd/mm/yyyy”。如果是,您可以轻松转换此字段,而不是尝试合并和转换 @year 和 @month 字段。检查这个查询:

    SELECT *
    FROM table_name
    WHERE CONVERT(DATE,f_datetime,103)<= CAST(CONVERT(VARCHAR, @year) + '-' + CONVERT(VARCHAR, @month) + '-' + '01' AS DATE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      相关资源
      最近更新 更多