如何检查具体的日期格式?

时间:2013-08-28 15:47:40

标签: sql sql-server tsql

我遇到日期问题。问题是,即使格式不同,ISDATE也会给我有效的日期。但是,我想要做的是INSERT NULL是任何未格式化的日期字段: 2013年8月28日或2013年8月28日

这是供国际使用的。仅限美国使用。这意味着:2013年8月8日将意味着2011年8月8日。并且将演员出现在2011-08-08。

我不确定如何检查格式。我可以做整个案例。

我试着这样玩:

DECLARE @d DATETIME = '10/01/2011';
SELECT CASE WHEN @d != FORMAT ( @d, 'yyyy/MM/dd', 'en-US' ) THEN @d ELSE NULL END

列中当前的日期是这样的格式。 2013年8月28日或2013年8月28日 如果格式正确,我会做演员。

谢谢!

2 个答案:

答案 0 :(得分:1)

看起来您正在使用datetime列,故意将其转换为字符串(从而对其进行格式化),然后查找遵循该格式的实例

事实是,格式仅在制作时才相关。 SQL不会将其存储为" 01/01/2013"或" 1/1/2013" - 它仅使用默认演员表或您提供的格式显示。

所以,原样,这个问题没有实际意义。您不会在数据中发现异常,只是您没有获得所需格式的情况。

关于清理,当SQL进入INSERT / UPDATE(并且格式不好[你提到0808/21/20133])时,你会得到类似的东西:

  

从字符串转换日期和/或时间时转换失败。

答案 1 :(得分:-1)

您可以将日期存储为varchar,然后将格式存储为以下查询:

DECLARE @d varchar(10) 
set @d= '08/28/2013';
SELECT CASE WHEN @d LIKE '[0-1][0-9]/[0-3][0-9]/[1-2][0-9][0-9][0-9]' THEN @d ELSE NULL END