2013-08-28 82 views
-2

我与日期有问题。问题是,即使格式不同,ISDATE也会给我有效的日期。但是,我想要做的是INSERT NULL是任何未格式化的日期字段:8/28/2013或08/28/2013如何检查特定的日期格式?

这是供国际使用。仅适用于美国。这意味着:2013年8月8日将意味着2011年8月8日。并将于2011年8月8日施展。

我不知道如何检查格式。当我可以做整个案例时。

我试图玩弄这样的:目前在列

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

我假设列_is not_一个'date' /'datetime'列?否则这个问题将是没有意义的,因为格式实际上并没有保留,只是它背后的信息。 (或者你正在研究如何将SQL默认格式转换为字符串/显示时的列格式) –

+0

这是一个日期,但APP验证是不存在的,所以日期输入如下:0808/21/20133,想想更糟糕的条目。我正在清理一些历史数据。 – Asynchronous

+2

您如何确定08/09/2013是否正确?是2013年9月8日还是2013年8月9日? –

回答

1

它看起来就像你正在做一项datetime列,它有意强制转换为字符串(因此格式化),然后找实例哪里会坚持这一格式。

事实是,格式只有在使它成立。 SQL不会将其存储为“2013年1月1日”或“2013年1月1日” - 它只会使用默认演员表或提供的格式进行显示。

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

在问候消毒,当SQL进入INSERT/UPDATE(和格式的坏[你提到0808/21/20133]),你会得到这样的:从转换日期和/或时间时

转换失败字符串。

+0

我不遵循您的观点:我正在使用CSV和文本文件中的历史数据。长话短说,由于这些格式,转换失败。认为解释非常简单。 – Asynchronous

+0

那么如何通过CSV解析等同于在SQL中的'datetime'列上执行维护? (也许我是一个困惑?) –

-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 
+0

上述不起作用,如果我这样做,它会抛出一个转换错误:08/28/20133,我需要简单地得到一个NULL而不是错误。无论如何感谢您的帮助和时间。 – Asynchronous

+0

我认为扩大变量大小可以解决问题。 – Sonam

+0

我认为存储日期作为varchar是一个可怕的想法。 –