如何规范数据格式?

How to standardize data format?

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

你能推荐一下如何标准化日期吗?

请看一下我在这里添加的查询结果:

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

如果你不做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

Returns

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

date 没有 格式,这意味着您的“日期”列不是 date,而是 varchar.有一个“简单”的方法来解决这个问题,修复列的数据类型。

希望 你只有两种格式,yyyy-MM-ddM/d/yyyy。如果是这样,那么我们可以使用这个样本集:

CREATE TABLE dbo.YourTable (Prod_Date varchar(10))

INSERT INTO dbo.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');

首先,我们需要获取ISO格式的数据,具体我将使用yyyyMMdd。不幸的是,为此我们需要几个带有样式代码的嵌套 CONVERT

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

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

ALTER TABLE dbo.YourTable ALTER COLUMN Prod_date date; --Add NULL if needed

然后你的 table 中就没有格式了,问题就不会再发生了。