2012-09-04 56 views

回答

16
SET DATEFORMAT MDY; 
SELECT CASE WHEN ISDATE(@string) = 1 
    AND @string LIKE '[0-1][0-9]/[0-3][0-9]/[1-2][0-9][0-9][0-9]' 
    THEN 1 ELSE 0 END; 

如果结果是1,这是一个有效的日期,但不能保证它是用户的意思。如果他们进入:

06/07/2012 

有没有办法知道他们是否意味着6月7日或7月6日最好的办法是让用户挑选日期从下拉列表或日历控件,它允许您控制格式并避免任何不必要的解释。您的应用程序层可以使用强类型变量/参数并插入正确类型的列。

+2

+1 - 应该注意的是,这当然暗示日期/时间应该**作为字符串类型存储,但是作为它们的适当类型。如果你想弄清楚数据库正在使用什么......你可能会遇到一些麻烦。 –

+0

@ X-Zero谢谢,并在上面添加了一个明确的声明。 –

3

如果你的SQL服务器的日期格式之后,看它是否是MDY然后使用:

dbcc useroptions 

而且具有看看日期格式设置选项

+0

+1 - 你知道如何改变它吗? –

0

你必须这样做外部数据库。数据库以自己的格式在内部存储datetime。我不认为你可以阅读日期存储的格式。你可以阅读它你喜欢的任何方式,例如dd/mm/yyyy或yyyy/mm/dd等。

你可以做的是检查这个任何日期字段的数据库外的值。你可以使用正则表达式。但那将在数据库之外。

2

您转换日期为这种格式datestring使用CONVERT function

select convert(varchar(10),getdate(),101) 

MM/DD/YYYY输出将是为9月8日的2012

09/08/2012 

无需验证,其他然后检查日期字段是否为空