-2

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

这是供国际使用的。并且仅供美国使用。这意味着:08/08/2013 将表示 2011 年 8 月 8 日。并且将投射为 2011-08-08。

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

我试着这样玩:

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

当前列中的日期是这样的格式。8/28/2013 或 08/28/2013 如果格式正确,我会进行演员表。

谢谢!

4

2 回答 2

1

看起来您正在获取一datetime列,故意将其转换为字符串(从而对其进行格式化),然后寻找它符合该格式的实例。

事实是,格式仅在您制作时才相关。SQL 不会将其存储为“01/01/2013”​​或“1/1/2013”​​——它仅使用默认转换或您提供的格式显示。

所以,照原样,这个问题是没有实际意义的。你不会在数据中发现异常,只是在你没有得到你想要的格式的情况下。

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

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

于 2013-08-28T15:53:41.857 回答
-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
于 2013-08-28T15:56:27.637 回答