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_datetimeFormatMM/DD/yyyyy
?@jarlh:不,我想要DD/MM/YYYY
格式。我用了103,我只是猜测,由于系统的语言,它采用的数据格式是:“月/日/年”。尝试2016-09-13
@nad,这将是conver函数结束后的格式。但是,convert函数接收到一个字符串,在convert函数中解析该字符串的格式是什么?。Convert函数分析采用系统默认日期时间格式的字符串。所以完全有可能转换函数,解析13
为@jarlhsaid@nadCONVERT(数据类型(长度)、表达式、样式)
中的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'}