我遇到日期问题。问题是,即使格式不同,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日 如果格式正确,我会做演员。
谢谢!
答案 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