【问题标题】:Date/time conversion error with DATEPART()DATEPART() 的日期/时间转换错误
【发布时间】:2013-03-20 12:55:22
【问题描述】:

当我尝试在 where 子句中使用 datepart 函数时出现错误。有人可以看看我下面的语法并提供一些建议吗?

DATEPART(DW,convert(date,convert(varchar(4),year)+'-'+convert(varchar(4),month)+'-
'+convert(varchar(4),day),120))

我正在尝试创建一个视图,并且选择查询在没有 where 子句的情况下可以正常工作,但是当我添加它时它返回以下错误:

Msg 241, Level 16, State 1, Line 1 转换时转换失败 字符串中的日期和/或时间。

【问题讨论】:

  • 那不是语法错误,那是在执行转换时来自无效字符串的错误。 yearmonthday 字段是否包含可用于创建有效日期的值?
  • 是的,所有的年月日值都可以用来创建有效日期。
  • 试着把convert(date,convert(varchar(4),year)+'-'+convert(varchar(4),month)+'-'+convert(varchar(4), day),120) 并打印它以查看它正在创建的日期,然后将该变量放入 datepart 函数中
  • 我可以将其添加到字段列表中,并且添加时没有错误。它正确显示了我的天数。但是我不希望它出现在视图中,而是想根据条件进行过滤。
  • 请向我们展示一个不起作用的示例 WHERE 子句。顺便说一句,您可以使用 DateAdd 从没有字符串转换的部分创建日期以添加到 0 (1900-1-1) ... 24/3/2013 的示例:DATEPART(DW,DATEADD(day, 24-1,DATEADD(month, 3-1,DATEADD(year, 2013-1900, 0))))

标签: sql sql-server-2008 syntax-error datepart


【解决方案1】:

试试这个:

PRINT   DATEPART(DW, 
    CONVERT( DATE, 
        CONVERT(VARCHAR(4),YEAR(getdate()) 
        + '-' + CONVERT(VARCHAR(4), MONTH(getdate())) 
        + '-' + CONVERT(VARCHAR(4), DAY(getdate())), 120) ) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2018-12-23
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多