您好我正在使用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')
输出结果为:“从字符串转换日期和/或时间时转换失败。”
提前致谢并提前致谢。
答案 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
答案 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
。