【问题标题】:Why date is not taking 13/09/2016为什么日期不占用 2016 年 9 月 13 日
【发布时间】:2016-09-27 07:20:52
【问题描述】:

我正在检查12/09/201613/09/2016 的条件,但它没有显示13/09/2016 的数据并给出错误

将 char 数据类型转换为 datetime 数据类型导致 datetime 值超出范围。

这是我的查询

SELECT DISTINCT  
   b.mkey ,  a.N_UserMkey, cuser_id,isnull(a.N_UserMkey,cuser_id) aa,
   ISNULL(b.first_name + ' ', '')  
   + ISNULL(b.last_name, '') NAME, convert(varchar,a.U_datetime,103) Action_Date
  FROM      inward_doc_tracking_trl a  
   INNER JOIN user_mst b ON isnull(a.N_UserMkey,cuser_id) = b.mkey  
  WHERE 
  convert(datetime,a.U_datetime,103) 
    BETWEEN convert(varchar,'12/09/2016',103)
  AND convert(varchar,'13/09/2016',103)
   and b.mkey=2357

【问题讨论】:

  • 格式化MM/DD/YYYY?
  • @jarlh:不,我想要dd/MM/yyy 格式。我为此使用了 103
  • 我只是猜测,由于系统的语言,它采用格式:“月/日/年”的数据。试试2016-09-13
  • @nad 这将是转换函数结束后的格式。但是,转换函数接收一个字符串,¿哪种格式被认为在转换函数内部解析该字符串?。转换函数分析采用系统默认日期时间格式的字符串。因此,转换函数完全有可能像@jarlh 所说的那样解析13
  • @nad CONVERT(data_type(length),expression,style) 中的 style 属性仅适用于日期或时间数据类型。 msdn.microsoft.com/en-us/library/ms187928.aspx

标签: sql sql-server sql-server-2005


【解决方案1】:

我不确定,但您似乎在这里累积了几个错误:

尝试将您的 WHERE 子句更改为此(所有日期时间均为 9 月 12 日,但不是 13 日)

WHERE a.U_datetime >= {d'2016-09-12'} AND a.U_datetime<{d'2016-09-13'}

或者这个(9 月 12 日和 13 日的所有日期时间)

WHERE a.U_datetime >= {d'2016-09-12'} AND a.U_datetime<{d'2016-09-14'}

【讨论】:

  • 我应该使用哪一个,第一个还是第二个..我很困惑
  • @nad 抱歉,convert 太多了...查看我的更新
  • 这里的d 是什么??
  • @nad。这是ODBC-格式。查找详细信息 herehere
  • 链接上的精彩解释。谢谢,会更正并通知您
【解决方案2】:

您需要转换为 DATETIME

...
BETWEEN convert(datetime,'12/09/2016',103)
  AND convert(datetime,'13/09/2016',103)

当前查询只将 BETWEEN 参数保留为 VARCHAR,然后服务器需要将它们与 convert(datetime,a.U_datetime,103) 进行比较。在那一刻,它们被转换为 DATETIME,但没有指定格式。

【讨论】:

  • @Shnugo 只需记住 BETWEEN 包含 (>= ,
  • 不是真的...午夜之前和之后的最后时刻可能是个问题...使用BETWEEN {d'2016-09-17'} AND {d'2016-09-18'}包含准确的午夜 + 微小时间的记录下一个 天,而BETWEEN {d'2016-09-17'} AND {ts'2016-09-17 23:59:59'} 可能会丢失最后一秒的记录(即使指定了毫秒...)。诚然是一个很小的问题,但没有必要......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多