【发布时间】:2018-08-06 17:14:49
【问题描述】:
我在 My_Table 中有一个 MyDate(datatype DATE) 列
MyDate
2016-11-01
0001-01-01
2016-08-01
当我执行以下查询时
SELECT ISDATE(MyDate),* FROM My_Table
我收到以下错误
消息 8116,级别 16,状态 1,行 2 参数数据类型日期无效 用于 isdate 函数的参数 1。
我认为问题可能是日期'0001-01-01'。但是当我执行
SELECT ISDATE('0001-01-01')
它按预期工作并产生了结果0。(即不是日期)
但是
DECLARE @V AS DATE = '0001-01-01' --no error
SELECT ISDATE(@V) --error
这会产生同样的错误。 我哪里错了?
编辑:- 如果我从 Mytable 中删除值 '0001-01-01',则查询 SELECT ISDATE(MyDate) 无需任何数据类型转换即可正常工作。
【问题讨论】:
-
为什么要对数据类型为 DATE 的列使用 ISDATE?你认为在什么情况下它会返回 FALSE?
-
@MartinSmith,如果 ISADTE('0001-01-01') 也返回 TRUE 则可以,我可以理解,
then why this error for date value? -
@AbdulRasheed 因为函数
ISDATE需要可以转换为字符串的字符串或表达式。由于Data Type Precedence,日期不会被转换成字符串 -
对于您要达到的目标,这里肯定存在一些混淆。根据定义,
date列中包含的任何内容都是有效日期。在你开始编写这段代码之前,你打算做什么? -
你现在最重要的问题是为什么开发人员选择不花时间让你使用一个函数来提出一个唯一可能答案是肯定的问题?如果不是,请首先解释是什么导致您尝试在
date值上调用ISDATE,我们或许能够提供实际帮助。否则,这只是琐事。
标签: sql-server tsql