如何标准化数据格式?

在使用SQL进行数据收集时遇到问题,显然,我们生产设备之一的程序员在MS access数据库中进行了更新,并更改了日期格式,这给我查找特定日期带来了麻烦。 / p>

您能建议如何标准化日期吗?

请查看我在此处添加的查询结果:

Prod_Date
-------------
8/24/2020
8/23/2020
8/22/2020
2020-08-24
2020-08-23
2020-08-22
2020-08-21
2020-08-20
2020-08-19
iCMS 回答:如何标准化数据格式?

如果您没有执行DMY,则只需使用try_convert()

示例

Declare @YourTable Table ([Prod_Date] varchar(50))
Insert Into @YourTable Values 
 ('8/24/2020'),('8/23/2020'),('8/22/2020'),('2020-08-24'),('2020-08-23'),('2020-08-22'),('2020-08-21'),('2020-08-20'),('2020-08-19')
 
Select *,AsDate = try_convert(date,[Prod_Date])
 from @YourTable

返回

Prod_Date   AsDate
8/24/2020   2020-08-24
8/23/2020   2020-08-23
8/22/2020   2020-08-22
2020-08-24  2020-08-24
2020-08-23  2020-08-23
2020-08-22  2020-08-22
2020-08-21  2020-08-21
2020-08-20  2020-08-20
2020-08-19  2020-08-19
,

public class Playground { private static Optional<Map<String,Integer>> transform(List<Tuple<String,Optional<Integer>>> input) { if (input.stream().anyMatch(t->t.second.isEmpty())) return Optional.empty(); Map<String,Integer> theMap = input.stream() .map(t -> new Tuple<>(t.first,t.second.get())) .collect(Collectors.groupingBy( t1 -> t1.first,Collectors.mapping(t2 -> t2.second,toSingle()))); return Optional.of(theMap); } @Test public void collect() { List<Tuple<String,Optional<Integer>>> input1 = new ArrayList<>(); input1.add(new Tuple<>("foo",Optional.of(1))); input1.add(new Tuple<>("bar",Optional.empty())); Optional<Map<String,Integer>> result1 = transform(input1); assertTrue(result1.isEmpty()); List<Tuple<String,Optional<Integer>>> input2 = new ArrayList<>(); input2.add(new Tuple<>("foo",Optional.of(1))); input2.add(new Tuple<>("bar",Optional.of(2))); Optional<Map<String,Integer>> result2 = transform(input2); assertTrue(result2.isPresent()); assertEquals((int)1,(int)result2.get().get("foo")); assertEquals((int)2,(int)result2.get().get("bar")); } private static class Tuple<T1,T2> { public T1 first; public T2 second; public Tuple(T1 first,T2 second) { this.first = first; this.second = second; } } public static <T> Collector<T,?,T> toSingle() { return Collectors.collectingAndThen( Collectors.toList(),list -> list.get(0) ); } } 没有的格式,这意味着您的“日期”列不是date,而是date。有一种“简便”的方法可以解决此问题,可以修复列的数据类型。

希望,您只有2种格式,varcharyyyy-MM-dd。如果是这样,那么我们可以使用以下样本集:

M/d/yyyy

首先,我们需要获取ISO格式的数据,特别是我将使用CREATE TABLE dbo.YourTable (Prod_Date varchar(10)) INSERT INTO dbo.YourTable VALUES ('8/24/2020'),('2020-08-19'); 。为此,不幸的是,我们需要几个嵌套的yyyyMMdd,它们带有样式代码:

CONVERT

然后我们可以更改列的数据类型:

UPDATE dbo.YourTable
SET Prod_Date = TRY_CONVERT(varchar(8),ISNULL(TRY_CONVERT(date,Prod_Date,101),TRY_CONVERT(date,23)),112);

然后您的表中不再有格式,并且该问题不再可能发生。

本文链接:https://www.f2er.com/1508560.html

大家都在问