大家早上好。
我正在中途转换我的日期来自旧记录,这是一个varchar变量基本上我正在做的是使用此CONVERT(Varchar, date_column, 103)
并附有case语句来检查日期是否有效通过isdate()
现在我我有点意外,为什么这个日期3/25/013在通过isdate()
函数
我基本上是MSSQL的新手,任何见解都会有所帮助
谢谢
答案 0 :(得分:1)
http://technet.microsoft.com/en-us/library/ms187347.aspx
isdate
同时接受m/d
和d/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。