Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么日期不是2016年9月13日_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql 为什么日期不是2016年9月13日

Sql 为什么日期不是2016年9月13日,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我正在检查12/09/2016至13/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_n

我正在检查
12/09/2016
13/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

您需要转换为DATETIME

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

目前,查询只是在参数之间留下VARCHAR,然后服务器需要将它们与
convert(datetime,a.U\U datetime,103)
进行比较。此时,它们被转换为DATETIME,没有指定格式。

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

  • 不要检查
    介于
    之间的日期范围。由于datetime的时间部分,这是非常有害的。经常被遗忘。。。你可以
  • 切勿在特定于区域性的格式中使用文字日期。你可以
  • 始终以所需的类型比较数据。您将日期转换为字符串只是为了比较它们的字母数字
  • convert(varchar,'12/09/2016',103)
    中,您使用的
    varchar
    没有长度
尝试将您的
WHERE
条款更改为此(所有日期时间均为9月12日,但不是13日)


其中a.U_datetime>={d'2016-09-12'}和a.U_datetime={d'2016-09-12'}和a.U_datetimeFormat
MM/DD/yyyyy
?@jarlh:不,我想要
DD/MM/YYYY
格式。我用了103,我只是猜测,由于系统的语言,它采用的数据格式是:“月/日/年”。尝试
2016-09-13
@nad,这将是conver函数结束后的格式。但是,convert函数接收到一个字符串,在convert函数中解析该字符串的格式是什么?。Convert函数分析采用系统默认日期时间格式的字符串。所以完全有可能转换函数,解析
13
为@jarlhsaid@nad
CONVERT(数据类型(长度)、表达式、样式)
中的
style
属性仅适用于日期或时间数据类型。我应该用哪一个,第一个还是第二个。。我是confused@nad很抱歉,有一个
转换为多个。。。查看我的更新这里有什么。这是
ODBC
-格式。在链接上查找详细信息和详细说明。谢谢,我会纠正并让你know@Shnugo这只是一个记住之间是包容的(>=,不是真的…午夜前后的最后时刻可能是个问题…在{d'2016-09-17}和{d'2016-09-18}之间进行
将包含一个精确的午夜+第二天的微小时间的记录,而
在{d'2016-09-17}和{d'2016-09-18}之间{d'2016-09-17'}和{ts'2016-09-17 23:59:59'}
可能会丢失最后一秒的记录(即使指定为毫秒…)。这是一个很小的问题,但不是必需的。。。
WHERE a.U_datetime >= {d'2016-09-12'} AND a.U_datetime<{d'2016-09-13'}
WHERE a.U_datetime >= {d'2016-09-12'} AND a.U_datetime<{d'2016-09-14'}