存在一种方法来验证是一个像'Abr 21 2010 12:00 AM'的字符串是日期时间和演员到日期时间?

时间:2017-02-25 20:18:34

标签: sql-server date datetime casting sql-server-2012

您好我正在使用sql server 2014,我试图解析这个'Abr 21 2010 12:00 AM'到目前为止,我试过这样的事情:

SELECT CONVERT(DATETIME,'Abr 21 2010 12:00AM' ,105)

SELECT CAST('Abr 21 2010 12:00AM' AS DATETIME)

如果我尝试验证格式是否为日期:

SELECT ISDATE('Abr 21 2010 12:00AM')

输出结果为:“从字符串转换日期和/或时间时转换失败。”

提前致谢并提前致谢。

3 个答案:

答案 0 :(得分:3)

SELECT ISDATE('Abr 21 2010 12:00AM')返回0,这是SQL Server的说法"不,这不是日期。"

SELECT ISDATE('Apr 21 2010 12:00AM')会返回1,这意味着"是的,这是一个约会。" (我只是将B改为月份名称中的P ......)

这只是一个错字吗?

修改

由于您提到这可能是一个基于语言的问题,我在此处添加您可以使用SET LANGUAGE命令来更改您的数据库语言,甚至是暂时的。 (这已添加为separate answer here。)语法如下所示:

SET LANGUAGE 'Spanish';

SELECT ISDATE('Abr 21 2010 12:00AM'); -- Returns 1, indicating that this is a date

SET LANGUAGE 'English'; -- Changes the DB Language setting back to English

SELECT ISDATE('Abr 21 2010 12:00AM'); -- Returns 0, because the language is no longer appropriate

答案 1 :(得分:2)

您可以使用SET LANGUAGE命令:

SET LANGUAGE  'Spanish';    
SELECT ISDATE('Abr 21 2010 12:00AM')
-- returns 1

MSDN Reference

答案 2 :(得分:1)

在Sql Server 2012+中执行此操作的最佳方法是try_parse()使用'es-US'的可选culture参数,如下所示:

select try_parse('Abr 21 2010 12:00am' as datetime using 'es-US')

返回:2010-04-21 00:00:00

如果无法转换该值,则会返回null。因此,您不会在失败的转化中遇到错误,只需记住检查null的值并正确处理失败的转化。

在Sql Server 2012及更高版本中:当转换失败而不是错误时,每个都会返回null