Isdate功能将此3/25/013作为有效日期

时间:2014-05-09 00:15:50

标签: sql-server

大家早上好。

我正在中途转换我的日期来自旧记录,这是一个varchar变量基本上我正在做的是使用此CONVERT(Varchar, date_column, 103)并附有case语句来检查日期是否有效通过isdate()现在我我有点意外,为什么这个日期3/25/013在通过isdate()函数

时有效

我基本上是MSSQL的新手,任何见解都会有所帮助

谢谢

3 个答案:

答案 0 :(得分:1)

http://technet.microsoft.com/en-us/library/ms187347.aspx

isdate同时接受m/dd/m订单(但行为取决于DATEFORMAT值)。

答案 1 :(得分:1)

如果date_column是varchar,则将varchar转换为varchar,并且将完全忽略“103”日期格式。你应该做的

CONVERT(date, date_column, 103)

zerkms是对的,格式103是dd / mm / yyyy。

答案 2 :(得分:1)

在Sql Server的默认设置下,如果传递的参数是Datetime / Date值,则ISDATE()函数将仅返回true(1),或者传递的参数/ Expression / String可以转换为Datetime / Date数据类型。即mm/dd/yyyy

即使您传递日期字符串值,其格式为dd / mm / yyyy,例如05/05/1025并且可以转换为mm / dd / yyyy,ISDATE函数将返回true,因为它可以转换到了约会时间。即使您将其传递为dd / mm / yyyy,但sql server将其读取为有效的mm / dd / yyyy值。

但另一方面,如果你传递的字符串又是dd / mm / yyyy格式,但是这个值类似于25/05/2014,此时sql server将为此值返回false并返回0。 / p>

见下面的例子。

DECLARE @date VARCHAR(10) = '25/05/2014'
SELECT ISDATE(@date) 
Result: 0

DECLARE @date VARCHAR(10) = '05/05/2014'
SELECT ISDATE(@date) 
Result: 1

DECLARE @date DATETIME = '05/25/2014'
SELECT ISDATE(CONVERT(VARCHAR(10),@date,103)) 
Result: 0

只要月份的值小于13,您的转换为103将评估为true,否则isdate将返回false。