Sql 如何检查特定的日期格式?
我对约会有意见。问题是,ISDATE会给我有效的日期,即使格式不同。但是,我想做的是,插入NULL是任何未格式化为:8/28/2013或08/28/2013的日期字段 这是国际通用的。仅供美国使用。这意味着:2013年8月8日意味着2011年8月8日。并将出演2011-08-08 我不知道如何检查格式。我什么时候可以做整个案子 我试着这样玩:Sql 如何检查特定的日期格式?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我对约会有意见。问题是,ISDATE会给我有效的日期,即使格式不同。但是,我想做的是,插入NULL是任何未格式化为:8/28/2013或08/28/2013的日期字段 这是国际通用的。仅供美国使用。这意味着:2013年8月8日意味着2011年8月8日。并将出演2011-08-08 我不知道如何检查格式。我什么时候可以做整个案子 我试着这样玩: DECLARE @d DATETIME = '10/01/2011'; SELECT CASE WHEN @d != FORMAT ( @d, 'yyyy
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日
如果格式正确,我会做一个演员
谢谢 看起来您正在获取一个
datetime
列,有意将其转换为字符串(从而对其进行格式化),然后查找不符合该格式的实例
事实是,格式只有在你制作的时候才相关。SQL没有将其存储为“01/01/2013”或“1/1/2013”--它仅使用默认转换或您提供的格式显示
因此,这个问题毫无意义。您不会在数据中发现异常,只会发现您没有获得所需格式的实例
关于清理,当SQL转到INSERT/UPDATE(格式不好[您提到的0808/21/20133
])时,您会得到如下结果:
从字符串转换日期和/或时间时,转换失败
您可以将日期存储为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
我假设该列不是
date
/datetime
列?否则这个问题就没有意义了,因为格式实际上并没有被保留,只是保留了它背后的信息。(或者您正在查看SQL default在转换为字符串/显示时如何格式化列)它是一个日期,但应用程序验证不存在,因此输入的日期类似于:0808/21/20133,请考虑更糟糕的输入。我正在整理一些历史数据。您如何确定2013年9月8日是否正确?是2013年9月8日还是2013年8月9日?2013年6月8日呢?或者是2013年8月6日,或者不是,也许……20133年8月21日不可能是日期。我不同意你的观点:我正在处理CSV和文本文件中的历史数据。长话短说,由于这些格式,转换失败了。我觉得解释很简单。那么,通过CSV解析如何等同于对SQL中的datetime
列执行维护呢?(也许是我弄糊涂了?)上面的方法不起作用,如果我这样做,它会抛出一个转换错误:08/28/20133,我只需要得到一个空值,而不是错误。无论如何,谢谢你的帮助和时间。我认为扩展变量大小可以解决这个问题。我认为将日期存储为varchar是一个可怕的想法。@DanBracuk:这里,用户说用户可以插入任何不能使用日期格式的日期,我不知道如何在datetime类型的变量中存储像“08/28/20133”这样的值。